mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 10:00:01 +08:00 
			
		
		
		
	 749ee2a10e
			
		
	
	749ee2a10e
	
	
	
		
			
			add the ability to add multiple containers into a single k8s pod instead of just one. also fixed some bugs in the resulting yaml where an empty service description was being added on error causing the k8s validation to fail. Signed-off-by: baude <bbaude@redhat.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package libpod
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 
 | |
| 	"github.com/containers/podman/v2/libpod"
 | |
| 	"github.com/containers/podman/v2/pkg/api/handlers/utils"
 | |
| 	"github.com/containers/podman/v2/pkg/domain/entities"
 | |
| 	"github.com/containers/podman/v2/pkg/domain/infra/abi"
 | |
| 	"github.com/containers/podman/v2/pkg/util"
 | |
| 	"github.com/gorilla/schema"
 | |
| 	"github.com/pkg/errors"
 | |
| )
 | |
| 
 | |
| func GenerateSystemd(w http.ResponseWriter, r *http.Request) {
 | |
| 	runtime := r.Context().Value("runtime").(*libpod.Runtime)
 | |
| 	decoder := r.Context().Value("decoder").(*schema.Decoder)
 | |
| 	query := struct {
 | |
| 		Name            bool   `schema:"useName"`
 | |
| 		New             bool   `schema:"new"`
 | |
| 		RestartPolicy   string `schema:"restartPolicy"`
 | |
| 		StopTimeout     uint   `schema:"stopTimeout"`
 | |
| 		ContainerPrefix string `schema:"containerPrefix"`
 | |
| 		PodPrefix       string `schema:"podPrefix"`
 | |
| 		Separator       string `schema:"separator"`
 | |
| 	}{
 | |
| 		RestartPolicy:   "on-failure",
 | |
| 		StopTimeout:     util.DefaultContainerConfig().Engine.StopTimeout,
 | |
| 		ContainerPrefix: "container",
 | |
| 		PodPrefix:       "pod",
 | |
| 		Separator:       "-",
 | |
| 	}
 | |
| 
 | |
| 	if err := decoder.Decode(&query, r.URL.Query()); err != nil {
 | |
| 		utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest,
 | |
| 			errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	containerEngine := abi.ContainerEngine{Libpod: runtime}
 | |
| 	options := entities.GenerateSystemdOptions{
 | |
| 		Name:            query.Name,
 | |
| 		New:             query.New,
 | |
| 		RestartPolicy:   query.RestartPolicy,
 | |
| 		StopTimeout:     &query.StopTimeout,
 | |
| 		ContainerPrefix: query.ContainerPrefix,
 | |
| 		PodPrefix:       query.PodPrefix,
 | |
| 		Separator:       query.Separator,
 | |
| 	}
 | |
| 	report, err := containerEngine.GenerateSystemd(r.Context(), utils.GetName(r), options)
 | |
| 	if err != nil {
 | |
| 		utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error generating systemd units"))
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	utils.WriteResponse(w, http.StatusOK, report.Units)
 | |
| }
 | |
| 
 | |
| func GenerateKube(w http.ResponseWriter, r *http.Request) {
 | |
| 	runtime := r.Context().Value("runtime").(*libpod.Runtime)
 | |
| 	decoder := r.Context().Value("decoder").(*schema.Decoder)
 | |
| 	query := struct {
 | |
| 		Names   []string `schema:"names"`
 | |
| 		Service bool     `schema:"service"`
 | |
| 	}{
 | |
| 		// Defaults would go here.
 | |
| 	}
 | |
| 
 | |
| 	if err := decoder.Decode(&query, r.URL.Query()); err != nil {
 | |
| 		utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest,
 | |
| 			errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	containerEngine := abi.ContainerEngine{Libpod: runtime}
 | |
| 	options := entities.GenerateKubeOptions{Service: query.Service}
 | |
| 	report, err := containerEngine.GenerateKube(r.Context(), query.Names, options)
 | |
| 	if err != nil {
 | |
| 		utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error generating YAML"))
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	utils.WriteResponse(w, http.StatusOK, report.Reader)
 | |
| }
 |