diff options
Diffstat (limited to 'pkg/api')
| -rw-r--r-- | pkg/api/handlers/compat/containers.go | 31 | ||||
| -rw-r--r-- | pkg/api/server/register_containers.go | 62 | 
2 files changed, 90 insertions, 3 deletions
diff --git a/pkg/api/handlers/compat/containers.go b/pkg/api/handlers/compat/containers.go index 0f89c859e..6e1945db1 100644 --- a/pkg/api/handlers/compat/containers.go +++ b/pkg/api/handlers/compat/containers.go @@ -465,3 +465,34 @@ func formatCapabilities(slice []string) {  		slice[i] = strings.TrimPrefix(slice[i], "CAP_")  	}  } + +func RenameContainer(w http.ResponseWriter, r *http.Request) { +	runtime := r.Context().Value("runtime").(*libpod.Runtime) +	decoder := r.Context().Value("decoder").(*schema.Decoder) + +	name := utils.GetName(r) +	query := struct { +		Name string `schema:"name"` +	}{} +	if err := decoder.Decode(&query, r.URL.Query()); err != nil { +		utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) +		return +	} + +	ctr, err := runtime.LookupContainer(name) +	if err != nil { +		utils.ContainerNotFound(w, name, err) +		return +	} + +	if _, err := runtime.RenameContainer(r.Context(), ctr, query.Name); err != nil { +		if errors.Cause(err) == define.ErrPodExists || errors.Cause(err) == define.ErrCtrExists { +			utils.Error(w, "Something went wrong.", http.StatusConflict, err) +			return +		} +		utils.InternalServerError(w, err) +		return +	} + +	utils.WriteResponse(w, http.StatusNoContent, nil) +} diff --git a/pkg/api/server/register_containers.go b/pkg/api/server/register_containers.go index b80dea545..74a04b2e6 100644 --- a/pkg/api/server/register_containers.go +++ b/pkg/api/server/register_containers.go @@ -291,9 +291,6 @@ func (s *APIServer) registerContainersHandlers(r *mux.Router) error {  	r.HandleFunc(VersionedPath("/containers/{name}/pause"), s.APIHandler(compat.PauseContainer)).Methods(http.MethodPost)  	// Added non version path to URI to support docker non versioned paths  	r.HandleFunc("/containers/{name}/pause", s.APIHandler(compat.PauseContainer)).Methods(http.MethodPost) -	r.HandleFunc(VersionedPath("/containers/{name}/rename"), s.APIHandler(compat.UnsupportedHandler)).Methods(http.MethodPost) -	// Added non version path to URI to support docker non versioned paths -	r.HandleFunc("/containers/{name}/rename", s.APIHandler(compat.UnsupportedHandler)).Methods(http.MethodPost)  	// swagger:operation POST /containers/{name}/restart compat restartContainer  	// ---  	// tags: @@ -610,6 +607,36 @@ func (s *APIServer) registerContainersHandlers(r *mux.Router) error {  	//     $ref: "#/responses/InternalError"  	r.HandleFunc(VersionedPath("/containers/{name}/export"), s.APIHandler(compat.ExportContainer)).Methods(http.MethodGet)  	r.HandleFunc("/containers/{name}/export", s.APIHandler(compat.ExportContainer)).Methods(http.MethodGet) +	// swagger:operation POST /containers/{name}/rename compat renameContainer +	// --- +	// tags: +	//   - containers (compat) +	// summary: Rename an existing container +	// description: Change the name of an existing container. +	// parameters: +	//  - in: path +	//    name: name +	//    type: string +	//    required: true +	//    description: Full or partial ID or full name of the container to rename +	//  - in: query +	//    name: name +	//    type: string +	//    required: true +	//    description: New name for the container +	// produces: +	// - application/json +	// responses: +	//   204: +	//     description: no error +	//   404: +	//     $ref: "#/responses/NoSuchContainer" +	//   409: +	//     $ref: "#/responses/ConflictError" +	//   500: +	//     $ref: "#/responses/InternalError" +	r.HandleFunc(VersionedPath("/containers/{name}/rename"), s.APIHandler(compat.RenameContainer)).Methods(http.MethodPost) +	r.HandleFunc("/containers/{name}/rename", s.APIHandler(compat.RenameContainer)).Methods(http.MethodPost)  	/*  		libpod endpoints @@ -1463,5 +1490,34 @@ func (s *APIServer) registerContainersHandlers(r *mux.Router) error {  	//   500:  	//     $ref: "#/responses/InternalError"  	r.HandleFunc(VersionedPath("/libpod/containers/{name}/init"), s.APIHandler(libpod.InitContainer)).Methods(http.MethodPost) +	// swagger:operation POST /libpod/containers/{name}/rename libpod libpodRenameContainer +	// --- +	// tags: +	//   - containers +	// summary: Rename an existing container +	// description: Change the name of an existing container. +	// parameters: +	//  - in: path +	//    name: name +	//    type: string +	//    required: true +	//    description: Full or partial ID or full name of the container to rename +	//  - in: query +	//    name: name +	//    type: string +	//    required: true +	//    description: New name for the container +	// produces: +	// - application/json +	// responses: +	//   204: +	//     description: no error +	//   404: +	//     $ref: "#/responses/NoSuchContainer" +	//   409: +	//     $ref: "#/responses/ConflictError" +	//   500: +	//     $ref: "#/responses/InternalError" +	r.HandleFunc(VersionedPath("/libpod/containers/{name}/rename"), s.APIHandler(compat.RenameContainer)).Methods(http.MethodPost)  	return nil  }  | 
