github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/api/handlers/compat/containers_restart.go (about) 1 package compat 2 3 import ( 4 "net/http" 5 6 "github.com/hanks177/podman/v4/libpod" 7 "github.com/hanks177/podman/v4/libpod/define" 8 "github.com/hanks177/podman/v4/pkg/api/handlers/utils" 9 api "github.com/hanks177/podman/v4/pkg/api/types" 10 "github.com/hanks177/podman/v4/pkg/domain/entities" 11 "github.com/hanks177/podman/v4/pkg/domain/infra/abi" 12 "github.com/gorilla/schema" 13 "github.com/pkg/errors" 14 ) 15 16 func RestartContainer(w http.ResponseWriter, r *http.Request) { 17 runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) 18 decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder) 19 // Now use the ABI implementation to prevent us from having duplicate 20 // code. 21 containerEngine := abi.ContainerEngine{Libpod: runtime} 22 23 // /{version}/containers/(name)/restart 24 query := struct { 25 All bool `schema:"all"` 26 DockerTimeout uint `schema:"t"` 27 LibpodTimeout uint `schema:"timeout"` 28 }{ 29 // override any golang type defaults 30 } 31 if err := decoder.Decode(&query, r.URL.Query()); err != nil { 32 utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) 33 return 34 } 35 36 name := utils.GetName(r) 37 38 options := entities.RestartOptions{ 39 All: query.All, 40 Timeout: &query.DockerTimeout, 41 } 42 if utils.IsLibpodRequest(r) { 43 options.Timeout = &query.LibpodTimeout 44 } 45 report, err := containerEngine.ContainerRestart(r.Context(), []string{name}, options) 46 if err != nil { 47 if errors.Cause(err) == define.ErrNoSuchCtr { 48 utils.ContainerNotFound(w, name, err) 49 return 50 } 51 52 utils.InternalServerError(w, err) 53 return 54 } 55 56 if len(report) > 0 && report[0].Err != nil { 57 utils.InternalServerError(w, report[0].Err) 58 return 59 } 60 61 // Success 62 utils.WriteResponse(w, http.StatusNoContent, nil) 63 }