Remove unused param and clean API handlers

This commit removes error message string from utils.Error in pkg/api.
Param was not used inside a function for quite a long time
[NO NEW TESTS NEEDED]

Signed-off-by: Jakub Guzik <jguzik@redhat.com>
This commit is contained in:
Jakub Guzik 2022-01-21 23:56:23 +01:00
parent d847ad598d
commit 7938f32c53
46 changed files with 335 additions and 384 deletions

View file

@ -28,7 +28,7 @@ func Auth(w http.ResponseWriter, r *http.Request) {
var authConfig docker.AuthConfig var authConfig docker.AuthConfig
err := json.NewDecoder(r.Body).Decode(&authConfig) err := json.NewDecoder(r.Body).Decode(&authConfig)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse request")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse request"))
return return
} }

View file

@ -20,7 +20,7 @@ func Changes(w http.ResponseWriter, r *http.Request) {
DiffType string `schema:"diffType"` DiffType string `schema:"diffType"`
}{} }{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
var diffType define.DiffType var diffType define.DiffType
@ -32,7 +32,7 @@ func Changes(w http.ResponseWriter, r *http.Request) {
case "image": case "image":
diffType = define.DiffImage diffType = define.DiffImage
default: default:
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Errorf("invalid diffType value %q", query.DiffType)) utils.Error(w, http.StatusBadRequest, errors.Errorf("invalid diffType value %q", query.DiffType))
return return
} }

View file

@ -46,8 +46,7 @@ func RemoveContainer(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -61,8 +60,7 @@ func RemoveContainer(w http.ResponseWriter, r *http.Request) {
options.Depend = query.Depend options.Depend = query.Depend
} else { } else {
if query.Link { if query.Link {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, utils.ErrLinkNotSupport)
utils.ErrLinkNotSupport)
return return
} }
options.Volumes = query.DockerVolumes options.Volumes = query.DockerVolumes
@ -112,12 +110,12 @@ func ListContainers(w http.ResponseWriter, r *http.Request) {
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to decode filter parameters for %s", r.URL.String())) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to decode filter parameters for %s", r.URL.String()))
return return
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -189,7 +187,7 @@ func GetContainer(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -217,7 +215,7 @@ func KillContainer(w http.ResponseWriter, r *http.Request) {
Signal: "KILL", Signal: "KILL",
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -232,7 +230,7 @@ func KillContainer(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
if errors.Cause(err) == define.ErrCtrStateInvalid || if errors.Cause(err) == define.ErrCtrStateInvalid ||
errors.Cause(err) == define.ErrCtrStopped { errors.Cause(err) == define.ErrCtrStopped {
utils.Error(w, fmt.Sprintf("Container %s is not running", name), http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
if errors.Cause(err) == define.ErrNoSuchCtr { if errors.Cause(err) == define.ErrNoSuchCtr {
@ -262,7 +260,7 @@ func KillContainer(w http.ResponseWriter, r *http.Request) {
Interval: time.Millisecond * 250, Interval: time.Millisecond * 250,
} }
if _, err := containerEngine.ContainerWait(r.Context(), []string{name}, opts); err != nil { if _, err := containerEngine.ContainerWait(r.Context(), []string{name}, opts); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
} }
@ -613,7 +611,7 @@ func RenameContainer(w http.ResponseWriter, r *http.Request) {
Name string `schema:"name"` Name string `schema:"name"`
}{} }{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -625,7 +623,7 @@ func RenameContainer(w http.ResponseWriter, r *http.Request) {
if _, err := runtime.RenameContainer(r.Context(), ctr, query.Name); err != nil { if _, err := runtime.RenameContainer(r.Context(), ctr, query.Name); err != nil {
if errors.Cause(err) == define.ErrPodExists || errors.Cause(err) == define.ErrCtrExists { if errors.Cause(err) == define.ErrPodExists || errors.Cause(err) == define.ErrCtrExists {
utils.Error(w, "Something went wrong.", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
utils.InternalServerError(w, err) utils.InternalServerError(w, err)

View file

@ -28,7 +28,7 @@ func Archive(w http.ResponseWriter, r *http.Request) {
case http.MethodHead, http.MethodGet: case http.MethodHead, http.MethodGet:
handleHeadAndGet(w, r, decoder, runtime) handleHeadAndGet(w, r, decoder, runtime)
default: default:
utils.Error(w, fmt.Sprintf("unsupported method: %v", r.Method), http.StatusNotImplemented, errors.New(fmt.Sprintf("unsupported method: %v", r.Method))) utils.Error(w, http.StatusNotImplemented, errors.New(fmt.Sprintf("unsupported method: %v", r.Method)))
} }
} }
@ -39,12 +39,12 @@ func handleHeadAndGet(w http.ResponseWriter, r *http.Request, decoder *schema.De
err := decoder.Decode(&query, r.URL.Query()) err := decoder.Decode(&query, r.URL.Query())
if err != nil { if err != nil {
utils.Error(w, "Bad Request.", http.StatusBadRequest, errors.Wrap(err, "couldn't decode the query")) utils.Error(w, http.StatusBadRequest, errors.Wrap(err, "couldn't decode the query"))
return return
} }
if query.Path == "" { if query.Path == "" {
utils.Error(w, "Bad Request.", http.StatusBadRequest, errors.New("missing `path` parameter")) utils.Error(w, http.StatusBadRequest, errors.New("missing `path` parameter"))
return return
} }
@ -59,7 +59,7 @@ func handleHeadAndGet(w http.ResponseWriter, r *http.Request, decoder *schema.De
if statReport != nil { if statReport != nil {
statHeader, err := copy.EncodeFileInfo(&statReport.FileInfo) statHeader, err := copy.EncodeFileInfo(&statReport.FileInfo)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
w.Header().Add(copy.XDockerContainerPathStatHeader, statHeader) w.Header().Add(copy.XDockerContainerPathStatHeader, statHeader)
@ -68,10 +68,10 @@ func handleHeadAndGet(w http.ResponseWriter, r *http.Request, decoder *schema.De
if errors.Cause(err) == define.ErrNoSuchCtr || errors.Cause(err) == copy.ErrENOENT { if errors.Cause(err) == define.ErrNoSuchCtr || errors.Cause(err) == copy.ErrENOENT {
// 404 is returned for an absent container and path. The // 404 is returned for an absent container and path. The
// clients must deal with it accordingly. // clients must deal with it accordingly.
utils.Error(w, "Not found.", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} else if err != nil { } else if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -83,7 +83,7 @@ func handleHeadAndGet(w http.ResponseWriter, r *http.Request, decoder *schema.De
copyFunc, err := containerEngine.ContainerCopyToArchive(r.Context(), containerName, query.Path, w) copyFunc, err := containerEngine.ContainerCopyToArchive(r.Context(), containerName, query.Path, w)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
w.Header().Set("Content-Type", "application/x-tar") w.Header().Set("Content-Type", "application/x-tar")
@ -106,14 +106,14 @@ func handlePut(w http.ResponseWriter, r *http.Request, decoder *schema.Decoder,
err := decoder.Decode(&query, r.URL.Query()) err := decoder.Decode(&query, r.URL.Query())
if err != nil { if err != nil {
utils.Error(w, "Bad Request.", http.StatusBadRequest, errors.Wrap(err, "couldn't decode the query")) utils.Error(w, http.StatusBadRequest, errors.Wrap(err, "couldn't decode the query"))
return return
} }
var rename map[string]string var rename map[string]string
if query.Rename != "" { if query.Rename != "" {
if err := json.Unmarshal([]byte(query.Rename), &rename); err != nil { if err := json.Unmarshal([]byte(query.Rename), &rename); err != nil {
utils.Error(w, "Bad Request.", http.StatusBadRequest, errors.Wrap(err, "couldn't decode the query")) utils.Error(w, http.StatusBadRequest, errors.Wrap(err, "couldn't decode the query"))
return return
} }
} }
@ -126,16 +126,16 @@ func handlePut(w http.ResponseWriter, r *http.Request, decoder *schema.Decoder,
if errors.Cause(err) == define.ErrNoSuchCtr || os.IsNotExist(err) { if errors.Cause(err) == define.ErrNoSuchCtr || os.IsNotExist(err) {
// 404 is returned for an absent container and path. The // 404 is returned for an absent container and path. The
// clients must deal with it accordingly. // clients must deal with it accordingly.
utils.Error(w, "Not found.", http.StatusNotFound, errors.Wrap(err, "the container doesn't exists")) utils.Error(w, http.StatusNotFound, errors.Wrap(err, "the container doesn't exists"))
return return
} else if err != nil { } else if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if err := copyFunc(); err != nil { if err := copyFunc(); err != nil {
logrus.Error(err.Error()) logrus.Error(err.Error())
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)

View file

@ -28,7 +28,7 @@ func AttachContainer(w http.ResponseWriter, r *http.Request) {
Stream: true, Stream: true,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, "Error parsing parameters", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
@ -60,13 +60,13 @@ func AttachContainer(w http.ResponseWriter, r *http.Request) {
streams = nil streams = nil
} }
if useStreams && !streams.Stdout && !streams.Stderr && !streams.Stdin { if useStreams && !streams.Stdout && !streams.Stderr && !streams.Stdin {
utils.Error(w, "Parameter conflict", http.StatusBadRequest, errors.Errorf("at least one of stdin, stdout, stderr must be true")) utils.Error(w, http.StatusBadRequest, errors.Errorf("at least one of stdin, stdout, stderr must be true"))
return return
} }
// At least one of these must be set // At least one of these must be set
if !query.Stream && !query.Logs { if !query.Stream && !query.Logs {
utils.Error(w, "Unsupported parameter", http.StatusBadRequest, errors.Errorf("at least one of Logs or Stream must be set")) utils.Error(w, http.StatusBadRequest, errors.Errorf("at least one of Logs or Stream must be set"))
return return
} }
@ -85,7 +85,7 @@ func AttachContainer(w http.ResponseWriter, r *http.Request) {
// For Docker compatibility, we need to re-initialize containers in these states. // For Docker compatibility, we need to re-initialize containers in these states.
if state == define.ContainerStateConfigured || state == define.ContainerStateExited { if state == define.ContainerStateConfigured || state == define.ContainerStateExited {
if err := ctr.Init(r.Context(), ctr.PodID() != ""); err != nil { if err := ctr.Init(r.Context(), ctr.PodID() != ""); err != nil {
utils.Error(w, "Container in wrong state", http.StatusConflict, errors.Wrapf(err, "error preparing container %s for attach", ctr.ID())) utils.Error(w, http.StatusConflict, errors.Wrapf(err, "error preparing container %s for attach", ctr.ID()))
return return
} }
} else if !(state == define.ContainerStateCreated || state == define.ContainerStateRunning) { } else if !(state == define.ContainerStateCreated || state == define.ContainerStateRunning) {

View file

@ -27,15 +27,14 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
// compatible configuration // compatible configuration
body := handlers.CreateContainerConfig{} body := handlers.CreateContainerConfig{}
if err := json.NewDecoder(r.Body).Decode(&body); err != nil { if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -43,18 +42,18 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
body.Name = query.Name body.Name = query.Name
if len(body.HostConfig.Links) > 0 { if len(body.HostConfig.Links) > 0 {
utils.Error(w, utils.ErrLinkNotSupport.Error(), http.StatusBadRequest, errors.Wrapf(utils.ErrLinkNotSupport, "bad parameter")) utils.Error(w, http.StatusBadRequest, errors.Wrapf(utils.ErrLinkNotSupport, "bad parameter"))
return return
} }
rtc, err := runtime.GetConfig() rtc, err := runtime.GetConfig()
if err != nil { if err != nil {
utils.Error(w, "unable to obtain runtime config", http.StatusInternalServerError, errors.Wrap(err, "unable to get runtime config")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to get runtime config"))
return return
} }
imageName, err := utils.NormalizeToDockerHub(r, body.Config.Image) imageName, err := utils.NormalizeToDockerHub(r, body.Config.Image)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
body.Config.Image = imageName body.Config.Image = imageName
@ -62,18 +61,18 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
newImage, resolvedName, err := runtime.LibimageRuntime().LookupImage(body.Config.Image, nil) newImage, resolvedName, err := runtime.LibimageRuntime().LookupImage(body.Config.Image, nil)
if err != nil { if err != nil {
if errors.Cause(err) == storage.ErrImageUnknown { if errors.Cause(err) == storage.ErrImageUnknown {
utils.Error(w, "No such image", http.StatusNotFound, errors.Wrap(err, "No such image")) utils.Error(w, http.StatusNotFound, errors.Wrap(err, "No such image"))
return return
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error looking up image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error looking up image"))
return return
} }
// Take body structure and convert to cliopts // Take body structure and convert to cliopts
cliOpts, args, err := common.ContainerCreateToContainerCLIOpts(body, rtc) cliOpts, args, err := common.ContainerCreateToContainerCLIOpts(body, rtc)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "make cli opts()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "make cli opts()"))
return return
} }
@ -81,7 +80,7 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
// if the img had multi names with the same sha256 ID, should use the InputName, not the ID // if the img had multi names with the same sha256 ID, should use the InputName, not the ID
if len(newImage.Names()) > 1 { if len(newImage.Names()) > 1 {
if err := utils.IsRegistryReference(resolvedName); err != nil { if err := utils.IsRegistryReference(resolvedName); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
// maybe the InputName has no tag, so use full name to display // maybe the InputName has no tag, so use full name to display
@ -90,7 +89,7 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
sg := specgen.NewSpecGenerator(imgNameOrID, cliOpts.RootFS) sg := specgen.NewSpecGenerator(imgNameOrID, cliOpts.RootFS)
if err := specgenutil.FillOutSpecGen(sg, cliOpts, args); err != nil { if err := specgenutil.FillOutSpecGen(sg, cliOpts, args); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "fill out specgen")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "fill out specgen"))
return return
} }
// moby always create the working directory // moby always create the working directory
@ -99,7 +98,7 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
ic := abi.ContainerEngine{Libpod: runtime} ic := abi.ContainerEngine{Libpod: runtime}
report, err := ic.ContainerCreate(r.Context(), sg) report, err := ic.ContainerCreate(r.Context(), sg)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "container create")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "container create"))
return return
} }
createResponse := entities.ContainerCreateResponse{ createResponse := entities.ContainerCreateResponse{

View file

@ -21,21 +21,21 @@ func ExportContainer(w http.ResponseWriter, r *http.Request) {
} }
tmpfile, err := ioutil.TempFile("", "api.tar") tmpfile, err := ioutil.TempFile("", "api.tar")
if err != nil { if err != nil {
utils.Error(w, "unable to create tarball tempfile", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer os.Remove(tmpfile.Name()) defer os.Remove(tmpfile.Name())
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "unable to close tempfile", http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile"))
return return
} }
if err := con.Export(tmpfile.Name()); err != nil { if err := con.Export(tmpfile.Name()); err != nil {
utils.Error(w, "failed to save the image", http.StatusInternalServerError, errors.Wrap(err, "failed to save image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to save image"))
return return
} }
rdr, err := os.Open(tmpfile.Name()) rdr, err := os.Open(tmpfile.Name())
if err != nil { if err != nil {
utils.Error(w, "failed to read temp tarball", http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile"))
return return
} }
defer rdr.Close() defer rdr.Close()

View file

@ -36,13 +36,13 @@ func LogsFromContainer(w http.ResponseWriter, r *http.Request) {
Tail: "all", Tail: "all",
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if !(query.Stdout || query.Stderr) { if !(query.Stdout || query.Stderr) {
msg := fmt.Sprintf("%s: you must choose at least one stream", http.StatusText(http.StatusBadRequest)) msg := fmt.Sprintf("%s: you must choose at least one stream", http.StatusText(http.StatusBadRequest))
utils.Error(w, msg, http.StatusBadRequest, errors.Errorf("%s for %s", msg, r.URL.String())) utils.Error(w, http.StatusBadRequest, errors.Errorf("%s for %s", msg, r.URL.String()))
return return
} }

View file

@ -18,7 +18,7 @@ func PruneContainers(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
filtersMap, err := util.PrepareFilters(r) filtersMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -29,8 +29,7 @@ func RestartContainer(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -29,11 +29,11 @@ func StatsContainer(w http.ResponseWriter, r *http.Request) {
Stream: true, Stream: true,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if query.Stream && query.OneShot { // mismatch. one-shot can only be passed with stream=false if query.Stream && query.OneShot { // mismatch. one-shot can only be passed with stream=false
utils.Error(w, "invalid combination of stream and one-shot", http.StatusBadRequest, define.ErrInvalidArg) utils.Error(w, http.StatusBadRequest, define.ErrInvalidArg)
return return
} }
@ -52,7 +52,7 @@ func StatsContainer(w http.ResponseWriter, r *http.Request) {
return return
} }
if state != define.ContainerStateRunning { if state != define.ContainerStateRunning {
utils.Error(w, "Container not running and streaming requested", http.StatusConflict, define.ErrCtrStateInvalid) utils.Error(w, http.StatusConflict, define.ErrCtrStateInvalid)
return return
} }

View file

@ -29,8 +29,7 @@ func StopContainer(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -33,14 +33,12 @@ func TopContainer(w http.ResponseWriter, r *http.Request) {
PsArgs: psArgs, PsArgs: psArgs,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if query.Delay < 1 { if query.Delay < 1 {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, fmt.Errorf("\"delay\" parameter of value %d < 1", query.Delay))
fmt.Errorf("\"delay\" parameter of value %d < 1", query.Delay))
return return
} }

View file

@ -34,7 +34,7 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
Stream: true, Stream: true,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, "failed to parse parameters", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -44,7 +44,7 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
libpodFilters, err := util.FiltersFromRequest(r) libpodFilters, err := util.FiltersFromRequest(r)
if err != nil { if err != nil {
utils.Error(w, "failed to parse parameters", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
eventChannel := make(chan *events.Event) eventChannel := make(chan *events.Event)

View file

@ -2,7 +2,6 @@ package compat
import ( import (
"encoding/json" "encoding/json"
"fmt"
"net/http" "net/http"
"strings" "strings"
@ -48,7 +47,7 @@ func ExecCreateHandler(w http.ResponseWriter, r *http.Request) {
for _, envStr := range input.Env { for _, envStr := range input.Env {
split := strings.SplitN(envStr, "=", 2) split := strings.SplitN(envStr, "=", 2)
if len(split) != 2 { if len(split) != 2 {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, errors.Errorf("environment variable %q badly formed, must be key=value", envStr)) utils.Error(w, http.StatusBadRequest, errors.Errorf("environment variable %q badly formed, must be key=value", envStr))
return return
} }
libpodConfig.Environment[split[0]] = split[1] libpodConfig.Environment[split[0]] = split[1]
@ -85,7 +84,7 @@ func ExecCreateHandler(w http.ResponseWriter, r *http.Request) {
// Ignore the error != nil case. We're already // Ignore the error != nil case. We're already
// throwing an InternalServerError below. // throwing an InternalServerError below.
if state == define.ContainerStatePaused { if state == define.ContainerStatePaused {
utils.Error(w, "Container is paused", http.StatusConflict, errors.Errorf("cannot create exec session as container %s is paused", ctr.ID())) utils.Error(w, http.StatusConflict, errors.Errorf("cannot create exec session as container %s is paused", ctr.ID()))
return return
} }
} }
@ -107,7 +106,7 @@ func ExecInspectHandler(w http.ResponseWriter, r *http.Request) {
sessionID := mux.Vars(r)["id"] sessionID := mux.Vars(r)["id"]
sessionCtr, err := runtime.GetExecSessionContainer(sessionID) sessionCtr, err := runtime.GetExecSessionContainer(sessionID)
if err != nil { if err != nil {
utils.Error(w, fmt.Sprintf("No such exec session: %s", sessionID), http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
@ -138,15 +137,14 @@ func ExecStartHandler(w http.ResponseWriter, r *http.Request) {
bodyParams := new(handlers.ExecStartConfig) bodyParams := new(handlers.ExecStartConfig)
if err := json.NewDecoder(r.Body).Decode(&bodyParams); err != nil { if err := json.NewDecoder(r.Body).Decode(&bodyParams); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to decode parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to decode parameters for %s", r.URL.String()))
return return
} }
// TODO: Verify TTY setting against what inspect session was made with // TODO: Verify TTY setting against what inspect session was made with
sessionCtr, err := runtime.GetExecSessionContainer(sessionID) sessionCtr, err := runtime.GetExecSessionContainer(sessionID)
if err != nil { if err != nil {
utils.Error(w, fmt.Sprintf("No such exec session: %s", sessionID), http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
@ -158,7 +156,7 @@ func ExecStartHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
if state != define.ContainerStateRunning { if state != define.ContainerStateRunning {
utils.Error(w, http.StatusText(http.StatusConflict), http.StatusConflict, errors.Errorf("cannot exec in a container that is not running; container %s is %s", sessionCtr.ID(), state.String())) utils.Error(w, http.StatusConflict, errors.Errorf("cannot exec in a container that is not running; container %s is %s", sessionCtr.ID(), state.String()))
return return
} }

View file

@ -50,7 +50,7 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
tmpfile, err := ioutil.TempFile("", "api.tar") tmpfile, err := ioutil.TempFile("", "api.tar")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer os.Remove(tmpfile.Name()) defer os.Remove(tmpfile.Name())
@ -58,7 +58,7 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
@ -74,18 +74,18 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
utils.ImageNotFound(w, name, errors.Wrapf(err, "failed to find image %s", name)) utils.ImageNotFound(w, name, errors.Wrapf(err, "failed to find image %s", name))
return return
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile"))
return return
} }
rdr, err := os.Open(tmpfile.Name()) rdr, err := os.Open(tmpfile.Name())
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile"))
return return
} }
defer rdr.Close() defer rdr.Close()
@ -110,12 +110,12 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
rtc, err := runtime.GetConfig() rtc, err := runtime.GetConfig()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
sc := runtime.SystemContext() sc := runtime.SystemContext()
@ -131,7 +131,7 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
input := handlers.CreateContainerConfig{} input := handlers.CreateContainerConfig{}
if err := json.NewDecoder(r.Body).Decode(&input); err != nil { if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -143,7 +143,7 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
} }
ctr, err := runtime.LookupContainer(query.Container) ctr, err := runtime.LookupContainer(query.Container)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
@ -152,7 +152,7 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
destImage = fmt.Sprintf("%s:%s", query.Repo, query.Tag) destImage = fmt.Sprintf("%s:%s", query.Repo, query.Tag)
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, destImage) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, destImage)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
destImage = possiblyNormalizedName destImage = possiblyNormalizedName
@ -160,7 +160,7 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
commitImage, err := ctr.Commit(r.Context(), destImage, options) commitImage, err := ctr.Commit(r.Context(), destImage, options)
if err != nil && !strings.Contains(err.Error(), "is not running") { if err != nil && !strings.Contains(err.Error(), "is not running") {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "CommitFailure")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "CommitFailure"))
return return
} }
utils.WriteResponse(w, http.StatusCreated, handlers.IDResponse{ID: commitImage.ID()}) // nolint utils.WriteResponse(w, http.StatusCreated, handlers.IDResponse{ID: commitImage.ID()}) // nolint
@ -184,7 +184,7 @@ func CreateImageFromSrc(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
// fromSrc Source to import. The value may be a URL from which the image can be retrieved or - to read the image from the request body. This parameter may only be used when importing an image. // fromSrc Source to import. The value may be a URL from which the image can be retrieved or - to read the image from the request body. This parameter may only be used when importing an image.
@ -192,13 +192,13 @@ func CreateImageFromSrc(w http.ResponseWriter, r *http.Request) {
if source == "-" { if source == "-" {
f, err := ioutil.TempFile("", "api_load.tar") f, err := ioutil.TempFile("", "api_load.tar")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to create tempfile"))
return return
} }
source = f.Name() source = f.Name()
if err := SaveFromBody(f, r); err != nil { if err := SaveFromBody(f, r); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to write temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to write temporary file"))
} }
} }
@ -206,7 +206,7 @@ func CreateImageFromSrc(w http.ResponseWriter, r *http.Request) {
if query.Repo != "" { if query.Repo != "" {
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, reference) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, reference)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
reference = possiblyNormalizedName reference = possiblyNormalizedName
@ -227,7 +227,7 @@ func CreateImageFromSrc(w http.ResponseWriter, r *http.Request) {
imageEngine := abi.ImageEngine{Libpod: runtime} imageEngine := abi.ImageEngine{Libpod: runtime}
report, err := imageEngine.Import(r.Context(), opts) report, err := imageEngine.Import(r.Context(), opts)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to import tarball")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to import tarball"))
return return
} }
// Success // Success
@ -263,19 +263,19 @@ func CreateImageFromImage(w http.ResponseWriter, r *http.Request) {
// This is where you can override the golang default value for one of fields // This is where you can override the golang default value for one of fields
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, mergeNameAndTagOrDigest(query.FromImage, query.Tag)) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, mergeNameAndTagOrDigest(query.FromImage, query.Tag))
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
authConf, authfile, err := auth.GetCredentials(r) authConf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -386,7 +386,7 @@ func GetImage(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
@ -395,12 +395,12 @@ func GetImage(w http.ResponseWriter, r *http.Request) {
// Here we need to fiddle with the error message because docker-py is looking for "No // Here we need to fiddle with the error message because docker-py is looking for "No
// such image" to determine on how to raise the correct exception. // such image" to determine on how to raise the correct exception.
errMsg := strings.ReplaceAll(err.Error(), "image not known", "No such image") errMsg := strings.ReplaceAll(err.Error(), "image not known", "No such image")
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Errorf("failed to find image %s: %s", name, errMsg)) utils.Error(w, http.StatusNotFound, errors.Errorf("failed to find image %s: %s", name, errMsg))
return return
} }
inspect, err := handlers.ImageDataToImageInspect(r.Context(), newImage) inspect, err := handlers.ImageDataToImageInspect(r.Context(), newImage)
if err != nil { if err != nil {
utils.Error(w, "Server error", http.StatusInternalServerError, errors.Wrapf(err, "failed to convert ImageData to ImageInspect '%s'", inspect.ID)) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to convert ImageData to ImageInspect '%s'", inspect.ID))
return return
} }
utils.WriteResponse(w, http.StatusOK, inspect) utils.WriteResponse(w, http.StatusOK, inspect)
@ -418,7 +418,7 @@ func GetImages(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -429,7 +429,7 @@ func GetImages(w http.ResponseWriter, r *http.Request) {
filterList, err := filters.FiltersFromRequest(r) filterList, err := filters.FiltersFromRequest(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if !utils.IsLibpodRequest(r) { if !utils.IsLibpodRequest(r) {
@ -444,7 +444,7 @@ func GetImages(w http.ResponseWriter, r *http.Request) {
listOptions := entities.ImageListOptions{All: query.All, Filter: filterList} listOptions := entities.ImageListOptions{All: query.All, Filter: filterList}
summaries, err := imageEngine.List(r.Context(), listOptions) summaries, err := imageEngine.List(r.Context(), listOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -472,7 +472,7 @@ func LoadImages(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -480,7 +480,7 @@ func LoadImages(w http.ResponseWriter, r *http.Request) {
// to load. // to load.
f, err := ioutil.TempFile("", "api_load.tar") f, err := ioutil.TempFile("", "api_load.tar")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to create tempfile"))
return return
} }
defer func() { defer func() {
@ -490,7 +490,7 @@ func LoadImages(w http.ResponseWriter, r *http.Request) {
} }
}() }()
if err := SaveFromBody(f, r); err != nil { if err := SaveFromBody(f, r); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to write temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to write temporary file"))
return return
} }
@ -499,12 +499,12 @@ func LoadImages(w http.ResponseWriter, r *http.Request) {
loadOptions := entities.ImageLoadOptions{Input: f.Name()} loadOptions := entities.ImageLoadOptions{Input: f.Name()}
loadReport, err := imageEngine.Load(r.Context(), loadOptions) loadReport, err := imageEngine.Load(r.Context(), loadOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to load image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to load image"))
return return
} }
if len(loadReport.Names) < 1 { if len(loadReport.Names) < 1 {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Errorf("one or more images are required")) utils.Error(w, http.StatusInternalServerError, errors.Errorf("one or more images are required"))
return return
} }
@ -527,11 +527,11 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
// This is where you can override the golang default value for one of fields // This is where you can override the golang default value for one of fields
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if len(query.Names) <= 0 { if len(query.Names) <= 0 {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, fmt.Errorf("no images to download")) utils.Error(w, http.StatusBadRequest, fmt.Errorf("no images to download"))
return return
} }
@ -539,7 +539,7 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
for i, img := range query.Names { for i, img := range query.Names {
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, img) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, img)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
images[i] = possiblyNormalizedName images[i] = possiblyNormalizedName
@ -547,12 +547,12 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
tmpfile, err := ioutil.TempFile("", "api.tar") tmpfile, err := ioutil.TempFile("", "api.tar")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer os.Remove(tmpfile.Name()) defer os.Remove(tmpfile.Name())
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile"))
return return
} }
@ -566,7 +566,7 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
rdr, err := os.Open(tmpfile.Name()) rdr, err := os.Open(tmpfile.Name())
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile"))
return return
} }
defer rdr.Close() defer rdr.Close()

View file

@ -133,7 +133,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder) decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
@ -291,7 +291,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
if len(tags) > 0 { if len(tags) > 0 {
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, tags[0]) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, tags[0])
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
output = possiblyNormalizedName output = possiblyNormalizedName
@ -314,7 +314,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
for i := 1; i < len(tags); i++ { for i := 1; i < len(tags); i++ {
possiblyNormalizedTag, err := utils.NormalizeToDockerHub(r, tags[i]) possiblyNormalizedTag, err := utils.NormalizeToDockerHub(r, tags[i])
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
additionalTags = append(additionalTags, possiblyNormalizedTag) additionalTags = append(additionalTags, possiblyNormalizedTag)
@ -457,7 +457,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
creds, authfile, err := auth.GetCredentials(r) creds, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
// Credential value(s) not returned as their value is not human readable // Credential value(s) not returned as their value is not human readable
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -466,7 +466,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
if fromImage != "" { if fromImage != "" {
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, fromImage) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, fromImage)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
fromImage = possiblyNormalizedName fromImage = possiblyNormalizedName

View file

@ -16,7 +16,7 @@ func HistoryImage(w http.ResponseWriter, r *http.Request) {
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }

View file

@ -24,7 +24,7 @@ func PruneImages(w http.ResponseWriter, r *http.Request) {
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -28,7 +28,7 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
digestFile, err := ioutil.TempFile("", "digest.txt") digestFile, err := ioutil.TempFile("", "digest.txt")
if err != nil { if err != nil {
utils.Error(w, "unable to create digest tempfile", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer digestFile.Close() defer digestFile.Close()
@ -50,7 +50,7 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -63,14 +63,13 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
} }
if _, err := utils.ParseStorageReference(imageName); err != nil { if _, err := utils.ParseStorageReference(imageName); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "image source %q is not a containers-storage-transport reference", imageName))
errors.Wrapf(err, "image source %q is not a containers-storage-transport reference", imageName))
return return
} }
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, imageName) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, imageName)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
imageName = possiblyNormalizedName imageName = possiblyNormalizedName
@ -81,13 +80,13 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
} }
rawManifest, _, err := localImage.Manifest(r.Context()) rawManifest, _, err := localImage.Manifest(r.Context())
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
authconf, authfile, err := auth.GetCredentials(r) authconf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)

View file

@ -25,7 +25,7 @@ func RemoveImage(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if _, found := r.URL.Query()["noprune"]; found { if _, found := r.URL.Query()["noprune"]; found {
@ -36,7 +36,7 @@ func RemoveImage(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
@ -53,7 +53,7 @@ func RemoveImage(w http.ResponseWriter, r *http.Request) {
return return
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
response := make([]map[string]string, 0, len(report.Untagged)+1) response := make([]map[string]string, 0, len(report.Untagged)+1)

View file

@ -30,13 +30,13 @@ func SearchImages(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
_, authfile, err := auth.GetCredentials(r) _, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -58,7 +58,7 @@ func SearchImages(w http.ResponseWriter, r *http.Request) {
ir := abi.ImageEngine{Libpod: runtime} ir := abi.ImageEngine{Libpod: runtime}
reports, err := ir.Search(r.Context(), query.Term, options) reports, err := ir.Search(r.Context(), query.Term, options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if !utils.IsLibpodRequest(r) { if !utils.IsLibpodRequest(r) {

View file

@ -17,7 +17,7 @@ func TagImage(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name) possiblyNormalizedName, err := utils.NormalizeToDockerHub(r, name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
@ -34,7 +34,7 @@ func TagImage(w http.ResponseWriter, r *http.Request) {
tag = r.Form.Get("tag") tag = r.Form.Get("tag")
} }
if len(r.Form.Get("repo")) < 1 { if len(r.Form.Get("repo")) < 1 {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.New("repo parameter is required to tag an image")) utils.Error(w, http.StatusBadRequest, errors.New("repo parameter is required to tag an image"))
return return
} }
repo := r.Form.Get("repo") repo := r.Form.Get("repo")
@ -42,12 +42,12 @@ func TagImage(w http.ResponseWriter, r *http.Request) {
possiblyNormalizedTag, err := utils.NormalizeToDockerHub(r, tagName) possiblyNormalizedTag, err := utils.NormalizeToDockerHub(r, tagName)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error normalizing image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error normalizing image"))
return return
} }
if err := newImage.Tag(possiblyNormalizedTag); err != nil { if err := newImage.Tag(possiblyNormalizedTag); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
utils.WriteResponse(w, http.StatusCreated, "") utils.WriteResponse(w, http.StatusCreated, "")

View file

@ -33,18 +33,18 @@ func GetInfo(w http.ResponseWriter, r *http.Request) {
infoData, err := runtime.Info() infoData, err := runtime.Info()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain system memory info")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain system memory info"))
return return
} }
configInfo, err := runtime.GetConfig() configInfo, err := runtime.GetConfig()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain runtime config")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain runtime config"))
return return
} }
versionInfo, err := define.GetVersion() versionInfo, err := define.GetVersion()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain podman versions")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain podman versions"))
return return
} }
stateInfo := getContainersState(runtime) stateInfo := getContainersState(runtime)

View file

@ -36,12 +36,12 @@ func InspectNetwork(w http.ResponseWriter, r *http.Request) {
} }
decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder) decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if query.scope != "local" { if query.scope != "local" {
utils.Error(w, "Invalid scope value. Can only be local.", http.StatusBadRequest, define.ErrInvalidArg) utils.Error(w, http.StatusBadRequest, define.ErrInvalidArg)
return return
} }
name := utils.GetName(r) name := utils.GetName(r)
@ -133,7 +133,7 @@ func ListNetworks(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -166,7 +166,7 @@ func CreateNetwork(w http.ResponseWriter, r *http.Request) {
) )
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
if err := json.NewDecoder(r.Body).Decode(&networkCreate); err != nil { if err := json.NewDecoder(r.Body).Decode(&networkCreate); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -262,7 +262,7 @@ func RemoveNetwork(w http.ResponseWriter, r *http.Request) {
decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder) decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -274,17 +274,17 @@ func RemoveNetwork(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
reports, err := ic.NetworkRm(r.Context(), []string{name}, options) reports, err := ic.NetworkRm(r.Context(), []string{name}, options)
if err != nil { if err != nil {
utils.Error(w, "remove Network failed", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if len(reports) == 0 { if len(reports) == 0 {
utils.Error(w, "remove Network failed", http.StatusInternalServerError, errors.Errorf("internal error")) utils.Error(w, http.StatusInternalServerError, errors.Errorf("internal error"))
return return
} }
report := reports[0] report := reports[0]
if report.Err != nil { if report.Err != nil {
if errors.Cause(report.Err) == define.ErrNoSuchNetwork { if errors.Cause(report.Err) == define.ErrNoSuchNetwork {
utils.Error(w, "network not found", http.StatusNotFound, define.ErrNoSuchNetwork) utils.Error(w, http.StatusNotFound, define.ErrNoSuchNetwork)
return return
} }
utils.InternalServerError(w, report.Err) utils.InternalServerError(w, report.Err)
@ -302,7 +302,7 @@ func Connect(w http.ResponseWriter, r *http.Request) {
netConnect types.NetworkConnect netConnect types.NetworkConnect
) )
if err := json.NewDecoder(r.Body).Decode(&netConnect); err != nil { if err := json.NewDecoder(r.Body).Decode(&netConnect); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -318,7 +318,7 @@ func Connect(w http.ResponseWriter, r *http.Request) {
if len(netConnect.EndpointConfig.IPAddress) > 0 { if len(netConnect.EndpointConfig.IPAddress) > 0 {
staticIP := net.ParseIP(netConnect.EndpointConfig.IPAddress) staticIP := net.ParseIP(netConnect.EndpointConfig.IPAddress)
if staticIP == nil { if staticIP == nil {
utils.Error(w, "failed to parse the ip address", http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Errorf("failed to parse the ip address %q", netConnect.EndpointConfig.IPAddress)) errors.Errorf("failed to parse the ip address %q", netConnect.EndpointConfig.IPAddress))
return return
} }
@ -330,7 +330,7 @@ func Connect(w http.ResponseWriter, r *http.Request) {
if len(netConnect.EndpointConfig.IPAMConfig.IPv4Address) > 0 { if len(netConnect.EndpointConfig.IPAMConfig.IPv4Address) > 0 {
staticIP := net.ParseIP(netConnect.EndpointConfig.IPAMConfig.IPv4Address) staticIP := net.ParseIP(netConnect.EndpointConfig.IPAMConfig.IPv4Address)
if staticIP == nil { if staticIP == nil {
utils.Error(w, "failed to parse the ipv4 address", http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Errorf("failed to parse the ipv4 address %q", netConnect.EndpointConfig.IPAMConfig.IPv4Address)) errors.Errorf("failed to parse the ipv4 address %q", netConnect.EndpointConfig.IPAMConfig.IPv4Address))
return return
} }
@ -340,7 +340,7 @@ func Connect(w http.ResponseWriter, r *http.Request) {
if len(netConnect.EndpointConfig.IPAMConfig.IPv6Address) > 0 { if len(netConnect.EndpointConfig.IPAMConfig.IPv6Address) > 0 {
staticIP := net.ParseIP(netConnect.EndpointConfig.IPAMConfig.IPv6Address) staticIP := net.ParseIP(netConnect.EndpointConfig.IPAMConfig.IPv6Address)
if staticIP == nil { if staticIP == nil {
utils.Error(w, "failed to parse the ipv6 address", http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Errorf("failed to parse the ipv6 address %q", netConnect.EndpointConfig.IPAMConfig.IPv6Address)) errors.Errorf("failed to parse the ipv6 address %q", netConnect.EndpointConfig.IPAMConfig.IPv6Address))
return return
} }
@ -351,7 +351,7 @@ func Connect(w http.ResponseWriter, r *http.Request) {
if len(netConnect.EndpointConfig.MacAddress) > 0 { if len(netConnect.EndpointConfig.MacAddress) > 0 {
staticMac, err := net.ParseMAC(netConnect.EndpointConfig.MacAddress) staticMac, err := net.ParseMAC(netConnect.EndpointConfig.MacAddress)
if err != nil { if err != nil {
utils.Error(w, "failed to parse the mac address", http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Errorf("failed to parse the mac address %q", netConnect.EndpointConfig.IPAMConfig.IPv6Address)) errors.Errorf("failed to parse the mac address %q", netConnect.EndpointConfig.IPAMConfig.IPv6Address))
return return
} }
@ -365,10 +365,10 @@ func Connect(w http.ResponseWriter, r *http.Request) {
return return
} }
if errors.Cause(err) == define.ErrNoSuchNetwork { if errors.Cause(err) == define.ErrNoSuchNetwork {
utils.Error(w, "network not found", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
utils.WriteResponse(w, http.StatusOK, "OK") utils.WriteResponse(w, http.StatusOK, "OK")
@ -380,7 +380,7 @@ func Disconnect(w http.ResponseWriter, r *http.Request) {
var netDisconnect types.NetworkDisconnect var netDisconnect types.NetworkDisconnect
if err := json.NewDecoder(r.Body).Decode(&netDisconnect); err != nil { if err := json.NewDecoder(r.Body).Decode(&netDisconnect); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -388,14 +388,14 @@ func Disconnect(w http.ResponseWriter, r *http.Request) {
err := runtime.DisconnectContainerFromNetwork(netDisconnect.Container, name, netDisconnect.Force) err := runtime.DisconnectContainerFromNetwork(netDisconnect.Container, name, netDisconnect.Force)
if err != nil { if err != nil {
if errors.Cause(err) == define.ErrNoSuchCtr { if errors.Cause(err) == define.ErrNoSuchCtr {
utils.Error(w, "container not found", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
if errors.Cause(err) == define.ErrNoSuchNetwork { if errors.Cause(err) == define.ErrNoSuchNetwork {
utils.Error(w, "network not found", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
utils.WriteResponse(w, http.StatusOK, "OK") utils.WriteResponse(w, http.StatusOK, "OK")
@ -406,7 +406,7 @@ func Prune(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -416,7 +416,7 @@ func Prune(w http.ResponseWriter, r *http.Request) {
} }
pruneReports, err := ic.NetworkPrune(r.Context(), pruneOptions) pruneReports, err := ic.NetworkPrune(r.Context(), pruneOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
type response struct { type response struct {

View file

@ -28,8 +28,7 @@ func ResizeTTY(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -51,7 +50,7 @@ func ResizeTTY(w http.ResponseWriter, r *http.Request) {
if errors.Cause(err) != define.ErrCtrStateInvalid { if errors.Cause(err) != define.ErrCtrStateInvalid {
utils.InternalServerError(w, errors.Wrapf(err, "cannot resize container")) utils.InternalServerError(w, errors.Wrapf(err, "cannot resize container"))
} else { } else {
utils.Error(w, "Container not running", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
} }
return return
} }
@ -69,8 +68,7 @@ func ResizeTTY(w http.ResponseWriter, r *http.Request) {
utils.InternalServerError(w, errors.Wrapf(err, "cannot obtain session container state")) utils.InternalServerError(w, errors.Wrapf(err, "cannot obtain session container state"))
return return
} else if state != define.ContainerStateRunning && !query.IgnoreNotRunning { } else if state != define.ContainerStateRunning && !query.IgnoreNotRunning {
utils.Error(w, "Container not running", http.StatusConflict, utils.Error(w, http.StatusConflict, fmt.Errorf("container %q in wrong state %q", name, state.String()))
fmt.Errorf("container %q in wrong state %q", name, state.String()))
return return
} }
if err := ctnr.ExecResize(name, sz); err != nil { if err := ctnr.ExecResize(name, sz); err != nil {

View file

@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"fmt"
"net/http" "net/http"
"github.com/containers/podman/v4/libpod" "github.com/containers/podman/v4/libpod"
@ -22,8 +21,7 @@ func ListSecrets(w http.ResponseWriter, r *http.Request) {
) )
filtersMap, err := util.PrepareFilters(r) filtersMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
ic := abi.ContainerEngine{Libpod: runtime} ic := abi.ContainerEngine{Libpod: runtime}
@ -116,12 +114,11 @@ func CreateSecret(w http.ResponseWriter, r *http.Request) {
}{} }{}
if err := json.NewDecoder(r.Body).Decode(&createParams); err != nil { if err := json.NewDecoder(r.Body).Decode(&createParams); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
if len(createParams.Labels) > 0 { if len(createParams.Labels) > 0 {
utils.Error(w, "labels not supported", http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(errors.New("bad parameter"), "labels not supported"))
errors.Wrapf(errors.New("bad parameter"), "labels not supported"))
return return
} }
@ -133,7 +130,7 @@ func CreateSecret(w http.ResponseWriter, r *http.Request) {
report, err := ic.SecretCreate(r.Context(), createParams.Name, reader, opts) report, err := ic.SecretCreate(r.Context(), createParams.Name, reader, opts)
if err != nil { if err != nil {
if errors.Cause(err).Error() == "secret name in use" { if errors.Cause(err).Error() == "secret name in use" {
utils.Error(w, "name conflicts with an existing object", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
utils.InternalServerError(w, err) utils.InternalServerError(w, err)
@ -143,5 +140,5 @@ func CreateSecret(w http.ResponseWriter, r *http.Request) {
} }
func UpdateSecret(w http.ResponseWriter, r *http.Request) { func UpdateSecret(w http.ResponseWriter, r *http.Request) {
utils.Error(w, fmt.Sprintf("unsupported endpoint: %v", r.Method), http.StatusNotImplemented, errors.New("update is not supported")) utils.Error(w, http.StatusNotImplemented, errors.New("update is not supported"))
} }

View file

@ -22,13 +22,13 @@ func VersionHandler(w http.ResponseWriter, r *http.Request) {
running, err := define.GetVersion() running, err := define.GetVersion()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
info, err := runtime.Info() info, err := runtime.Info()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain system memory info")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to obtain system memory info"))
return return
} }

View file

@ -26,7 +26,7 @@ func ListVolumes(w http.ResponseWriter, r *http.Request) {
filtersMap, err := util.PrepareFilters(r) filtersMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -35,7 +35,7 @@ func ListVolumes(w http.ResponseWriter, r *http.Request) {
// happily parse them for us. // happily parse them for us.
for filter := range *filtersMap { for filter := range *filtersMap {
if filter == "opts" { if filter == "opts" {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Errorf("unsupported libpod filters passed to docker endpoint")) errors.Errorf("unsupported libpod filters passed to docker endpoint"))
return return
} }
@ -85,14 +85,14 @@ func CreateVolume(w http.ResponseWriter, r *http.Request) {
/* No query string data*/ /* No query string data*/
query := struct{}{} query := struct{}{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
// decode params from body // decode params from body
input := docker_api_types_volume.VolumeCreateBody{} input := docker_api_types_volume.VolumeCreateBody{}
if err := json.NewDecoder(r.Body).Decode(&input); err != nil { if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -220,7 +220,7 @@ func RemoveVolume(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -242,7 +242,7 @@ func RemoveVolume(w http.ResponseWriter, r *http.Request) {
// As above, we do not pass `force` from the query parameters here // As above, we do not pass `force` from the query parameters here
if err := runtime.RemoveVolume(r.Context(), vol, false, query.Timeout); err != nil { if err := runtime.RemoveVolume(r.Context(), vol, false, query.Timeout); err != nil {
if errors.Cause(err) == define.ErrVolumeBeingUsed { if errors.Cause(err) == define.ErrVolumeBeingUsed {
utils.Error(w, "volumes being used", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
} else { } else {
utils.InternalServerError(w, err) utils.InternalServerError(w, err)
} }
@ -268,14 +268,14 @@ func PruneVolumes(w http.ResponseWriter, r *http.Request) {
) )
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
f := (url.Values)(*filterMap) f := (url.Values)(*filterMap)
filterFuncs, err := filters.GeneratePruneVolumeFilters(f) filterFuncs, err := filters.GeneratePruneVolumeFilters(f)
if err != nil { if err != nil {
utils.Error(w, "Something when wrong.", http.StatusInternalServerError, errors.Wrapf(err, "failed to parse filters for %s", f.Encode())) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse filters for %s", f.Encode()))
return return
} }

View file

@ -35,8 +35,7 @@ func ContainerExists(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -76,14 +75,12 @@ func ListContainers(w http.ResponseWriter, r *http.Request) {
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to decode filter parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to decode filter parameters for %s", r.URL.String()))
return return
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -134,8 +131,7 @@ func GetContainer(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
@ -227,8 +223,7 @@ func Checkpoint(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -313,8 +308,7 @@ func Restore(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -379,7 +373,7 @@ func InitContainer(w http.ResponseWriter, r *http.Request) {
} }
err = ctr.Init(r.Context(), ctr.PodID() != "") err = ctr.Init(r.Context(), ctr.PodID() != "")
if errors.Cause(err) == define.ErrCtrStateInvalid { if errors.Cause(err) == define.ErrCtrStateInvalid {
utils.Error(w, "container already initialized", http.StatusNotModified, err) utils.Error(w, http.StatusNotModified, err)
return return
} }
if err != nil { if err != nil {

View file

@ -21,7 +21,7 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
var sg specgen.SpecGenerator var sg specgen.SpecGenerator
if err := json.NewDecoder(r.Body).Decode(&sg); err != nil { if err := json.NewDecoder(r.Body).Decode(&sg); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
if sg.Passwd == nil { if sg.Passwd == nil {

View file

@ -25,7 +25,7 @@ func StatsContainer(w http.ResponseWriter, r *http.Request) {
// if so, then verify cgroup v2 available (more expensive check) // if so, then verify cgroup v2 available (more expensive check)
if isV2, _ := cgroups.IsCgroup2UnifiedMode(); !isV2 { if isV2, _ := cgroups.IsCgroup2UnifiedMode(); !isV2 {
msg := "Container stats resource only available for cgroup v2" msg := "Container stats resource only available for cgroup v2"
utils.Error(w, msg, http.StatusConflict, errors.New(msg)) utils.Error(w, http.StatusConflict, errors.New(msg))
return return
} }
} }
@ -39,7 +39,7 @@ func StatsContainer(w http.ResponseWriter, r *http.Request) {
Interval: 5, Interval: 5,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -40,8 +40,7 @@ func GenerateSystemd(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -65,7 +64,7 @@ func GenerateSystemd(w http.ResponseWriter, r *http.Request) {
report, err := containerEngine.GenerateSystemd(r.Context(), utils.GetName(r), options) report, err := containerEngine.GenerateSystemd(r.Context(), utils.GetName(r), options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error generating systemd units")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error generating systemd units"))
return return
} }
@ -83,8 +82,7 @@ func GenerateKube(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -92,7 +90,7 @@ func GenerateKube(w http.ResponseWriter, r *http.Request) {
options := entities.GenerateKubeOptions{Service: query.Service} options := entities.GenerateKubeOptions{Service: query.Service}
report, err := containerEngine.GenerateKube(r.Context(), query.Names, options) report, err := containerEngine.GenerateKube(r.Context(), query.Names, options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error generating YAML")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error generating YAML"))
return return
} }

View file

@ -19,11 +19,11 @@ func RunHealthCheck(w http.ResponseWriter, r *http.Request) {
return return
} }
if status == define.HealthCheckNotDefined { if status == define.HealthCheckNotDefined {
utils.Error(w, "no healthcheck defined", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
if status == define.HealthCheckContainerStopped { if status == define.HealthCheckContainerStopped {
utils.Error(w, "container not running", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
utils.InternalServerError(w, err) utils.InternalServerError(w, err)

View file

@ -48,11 +48,11 @@ func ImageExists(w http.ResponseWriter, r *http.Request) {
ir := abi.ImageEngine{Libpod: runtime} ir := abi.ImageEngine{Libpod: runtime}
report, err := ir.Exists(r.Context(), name) report, err := ir.Exists(r.Context(), name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name)) utils.Error(w, http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name))
return return
} }
if !report.Value { if !report.Value {
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Errorf("failed to find image %s", name)) utils.Error(w, http.StatusNotFound, errors.Errorf("failed to find image %s", name))
return return
} }
utils.WriteResponse(w, http.StatusNoContent, "") utils.WriteResponse(w, http.StatusNoContent, "")
@ -68,8 +68,7 @@ func ImageTree(w http.ResponseWriter, r *http.Request) {
WhatRequires: false, WhatRequires: false,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
ir := abi.ImageEngine{Libpod: runtime} ir := abi.ImageEngine{Libpod: runtime}
@ -77,10 +76,10 @@ func ImageTree(w http.ResponseWriter, r *http.Request) {
report, err := ir.Tree(r.Context(), name, options) report, err := ir.Tree(r.Context(), name, options)
if err != nil { if err != nil {
if errors.Cause(err) == storage.ErrImageUnknown { if errors.Cause(err) == storage.ErrImageUnknown {
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name)) utils.Error(w, http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name))
return return
} }
utils.Error(w, "Server error", http.StatusInternalServerError, errors.Wrapf(err, "failed to generate image tree for %s", name)) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed to generate image tree for %s", name))
return return
} }
utils.WriteResponse(w, http.StatusOK, report) utils.WriteResponse(w, http.StatusOK, report)
@ -90,13 +89,13 @@ func GetImage(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
newImage, err := utils.GetImage(r, name) newImage, err := utils.GetImage(r, name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name)) utils.Error(w, http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name))
return return
} }
options := &libimage.InspectOptions{WithParent: true, WithSize: true} options := &libimage.InspectOptions{WithParent: true, WithSize: true}
inspect, err := newImage.Inspect(r.Context(), options) inspect, err := newImage.Inspect(r.Context(), options)
if err != nil { if err != nil {
utils.Error(w, "Server error", http.StatusInternalServerError, errors.Wrapf(err, "failed in inspect image %s", inspect.ID)) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "failed in inspect image %s", inspect.ID))
return return
} }
utils.WriteResponse(w, http.StatusOK, inspect) utils.WriteResponse(w, http.StatusOK, inspect)
@ -117,14 +116,14 @@ func PruneImages(w http.ResponseWriter, r *http.Request) {
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors. errors.
Wrapf(err, "failed to decode filter parameters for %s", r.URL.String())) Wrapf(err, "failed to decode filter parameters for %s", r.URL.String()))
return return
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors. errors.
Wrapf(err, "failed to parse parameters for %s", r.URL.String())) Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
@ -156,7 +155,7 @@ func PruneImages(w http.ResponseWriter, r *http.Request) {
} }
imagePruneReports, err := imageEngine.Prune(r.Context(), pruneOptions) imagePruneReports, err := imageEngine.Prune(r.Context(), pruneOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
utils.WriteResponse(w, http.StatusOK, imagePruneReports) utils.WriteResponse(w, http.StatusOK, imagePruneReports)
@ -176,7 +175,7 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -191,23 +190,23 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
case define.OCIArchive, define.V2s2Archive: case define.OCIArchive, define.V2s2Archive:
tmpfile, err := ioutil.TempFile("", "api.tar") tmpfile, err := ioutil.TempFile("", "api.tar")
if err != nil { if err != nil {
utils.Error(w, "unable to create tmpfile", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
output = tmpfile.Name() output = tmpfile.Name()
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "unable to close tmpfile", http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile"))
return return
} }
case define.OCIManifestDir, define.V2s2ManifestDir: case define.OCIManifestDir, define.V2s2ManifestDir:
tmpdir, err := ioutil.TempDir("", "save") tmpdir, err := ioutil.TempDir("", "save")
if err != nil { if err != nil {
utils.Error(w, "unable to create tmpdir", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempdir")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempdir"))
return return
} }
output = tmpdir output = tmpdir
default: default:
utils.Error(w, "unknown format", http.StatusInternalServerError, errors.Errorf("unknown format %q", query.Format)) utils.Error(w, http.StatusInternalServerError, errors.Errorf("unknown format %q", query.Format))
return return
} }
@ -219,7 +218,7 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
Output: output, Output: output,
} }
if err := imageEngine.Save(r.Context(), name, nil, saveOptions); err != nil { if err := imageEngine.Save(r.Context(), name, nil, saveOptions); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer os.RemoveAll(output) defer os.RemoveAll(output)
@ -236,7 +235,7 @@ func ExportImage(w http.ResponseWriter, r *http.Request) {
} }
rdr, err := os.Open(output) rdr, err := os.Open(output)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile"))
return return
} }
defer rdr.Close() defer rdr.Close()
@ -259,22 +258,20 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
// References are mandatory! // References are mandatory!
if len(query.References) == 0 { if len(query.References) == 0 {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.New("No references"))
errors.New("No references"))
return return
} }
// Format is mandatory! Currently, we only support multi-image docker // Format is mandatory! Currently, we only support multi-image docker
// archives. // archives.
if len(query.References) > 1 && query.Format != define.V2s2Archive { if len(query.References) > 1 && query.Format != define.V2s2Archive {
utils.Error(w, "unsupported format", http.StatusInternalServerError, errors.Errorf("multi-image archives must use format of %s", define.V2s2Archive)) utils.Error(w, http.StatusInternalServerError, errors.Errorf("multi-image archives must use format of %s", define.V2s2Archive))
return return
} }
@ -292,23 +289,23 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
case define.V2s2Archive, define.OCIArchive: case define.V2s2Archive, define.OCIArchive:
tmpfile, err := ioutil.TempFile("", "api.tar") tmpfile, err := ioutil.TempFile("", "api.tar")
if err != nil { if err != nil {
utils.Error(w, "unable to create tmpfile", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
output = tmpfile.Name() output = tmpfile.Name()
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "unable to close tmpfile", http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to close tempfile"))
return return
} }
case define.OCIManifestDir, define.V2s2ManifestDir: case define.OCIManifestDir, define.V2s2ManifestDir:
tmpdir, err := ioutil.TempDir("", "save") tmpdir, err := ioutil.TempDir("", "save")
if err != nil { if err != nil {
utils.Error(w, "unable to create tmpdir", http.StatusInternalServerError, errors.Wrap(err, "unable to create tmpdir")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tmpdir"))
return return
} }
output = tmpdir output = tmpdir
default: default:
utils.Error(w, "unsupported format", http.StatusInternalServerError, errors.Errorf("unsupported format %q", query.Format)) utils.Error(w, http.StatusInternalServerError, errors.Errorf("unsupported format %q", query.Format))
return return
} }
defer os.RemoveAll(output) defer os.RemoveAll(output)
@ -324,13 +321,13 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
imageEngine := abi.ImageEngine{Libpod: runtime} imageEngine := abi.ImageEngine{Libpod: runtime}
if err := imageEngine.Save(r.Context(), query.References[0], query.References[1:], opts); err != nil { if err := imageEngine.Save(r.Context(), query.References[0], query.References[1:], opts); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
rdr, err := os.Open(output) rdr, err := os.Open(output)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to read the exported tarfile"))
return return
} }
defer rdr.Close() defer rdr.Close()
@ -342,7 +339,7 @@ func ImagesLoad(w http.ResponseWriter, r *http.Request) {
tmpfile, err := ioutil.TempFile("", "libpod-images-load.tar") tmpfile, err := ioutil.TempFile("", "libpod-images-load.tar")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer os.Remove(tmpfile.Name()) defer os.Remove(tmpfile.Name())
@ -351,7 +348,7 @@ func ImagesLoad(w http.ResponseWriter, r *http.Request) {
tmpfile.Close() tmpfile.Close()
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file"))
return return
} }
@ -360,7 +357,7 @@ func ImagesLoad(w http.ResponseWriter, r *http.Request) {
loadOptions := entities.ImageLoadOptions{Input: tmpfile.Name()} loadOptions := entities.ImageLoadOptions{Input: tmpfile.Name()}
loadReport, err := imageEngine.Load(r.Context(), loadOptions) loadReport, err := imageEngine.Load(r.Context(), loadOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to load image")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to load image"))
return return
} }
utils.WriteResponse(w, http.StatusOK, loadReport) utils.WriteResponse(w, http.StatusOK, loadReport)
@ -379,8 +376,7 @@ func ImagesImport(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -389,14 +385,14 @@ func ImagesImport(w http.ResponseWriter, r *http.Request) {
if len(query.URL) == 0 { if len(query.URL) == 0 {
tmpfile, err := ioutil.TempFile("", "libpod-images-import.tar") tmpfile, err := ioutil.TempFile("", "libpod-images-import.tar")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer os.Remove(tmpfile.Name()) defer os.Remove(tmpfile.Name())
defer tmpfile.Close() defer tmpfile.Close()
if _, err := io.Copy(tmpfile, r.Body); err != nil && err != io.EOF { if _, err := io.Copy(tmpfile, r.Body); err != nil && err != io.EOF {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file"))
return return
} }
@ -413,7 +409,7 @@ func ImagesImport(w http.ResponseWriter, r *http.Request) {
} }
report, err := imageEngine.Import(r.Context(), importOptions) report, err := imageEngine.Import(r.Context(), importOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to import tarball")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to import tarball"))
return return
} }
@ -434,13 +430,13 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
// This is where you can override the golang default value for one of fields // This is where you can override the golang default value for one of fields
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
source := strings.TrimSuffix(utils.GetName(r), "/push") // GetName returns the entire path source := strings.TrimSuffix(utils.GetName(r), "/push") // GetName returns the entire path
if _, err := utils.ParseStorageReference(source); err != nil { if _, err := utils.ParseStorageReference(source); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
@ -450,13 +446,13 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
} }
if err := utils.IsRegistryReference(destination); err != nil { if err := utils.IsRegistryReference(destination); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
authconf, authfile, err := auth.GetCredentials(r) authconf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -479,7 +475,7 @@ func PushImage(w http.ResponseWriter, r *http.Request) {
imageEngine := abi.ImageEngine{Libpod: runtime} imageEngine := abi.ImageEngine{Libpod: runtime}
if err := imageEngine.Push(context.Background(), source, destination, options); err != nil { if err := imageEngine.Push(context.Background(), source, destination, options); err != nil {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "error pushing image %q", destination)) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "error pushing image %q", destination))
return return
} }
@ -508,12 +504,12 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { 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())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
rtc, err := runtime.GetConfig() rtc, err := runtime.GetConfig()
if err != nil { if err != nil {
utils.Error(w, "failed to get runtime config", http.StatusInternalServerError, errors.Wrap(err, "failed to get runtime config")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "failed to get runtime config"))
return return
} }
sc := runtime.SystemContext() sc := runtime.SystemContext()
@ -550,7 +546,7 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
options.Changes = query.Changes options.Changes = query.Changes
ctr, err := runtime.LookupContainer(query.Container) ctr, err := runtime.LookupContainer(query.Container)
if err != nil { if err != nil {
utils.Error(w, "failed to lookup container", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
@ -559,7 +555,7 @@ func CommitContainer(w http.ResponseWriter, r *http.Request) {
} }
commitImage, err := ctr.Commit(r.Context(), destImage, options) commitImage, err := ctr.Commit(r.Context(), destImage, options)
if err != nil && !strings.Contains(err.Error(), "is not running") { if err != nil && !strings.Contains(err.Error(), "is not running") {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrapf(err, "CommitFailure")) utils.Error(w, http.StatusInternalServerError, errors.Wrapf(err, "CommitFailure"))
return return
} }
utils.WriteResponse(w, http.StatusOK, handlers.IDResponse{ID: commitImage.ID()}) // nolint utils.WriteResponse(w, http.StatusOK, handlers.IDResponse{ID: commitImage.ID()}) // nolint
@ -576,7 +572,7 @@ func UntagImage(w http.ResponseWriter, r *http.Request) {
switch { switch {
// If tag is set, repo must be as well. // If tag is set, repo must be as well.
case len(repo) == 0 && len(tag) > 0: case len(repo) == 0 && len(tag) > 0:
utils.Error(w, "repo tag is required", http.StatusBadRequest, errors.New("repo parameter is required to tag an image")) utils.Error(w, http.StatusBadRequest, errors.New("repo parameter is required to tag an image"))
return return
case len(repo) == 0: case len(repo) == 0:
@ -601,7 +597,7 @@ func UntagImage(w http.ResponseWriter, r *http.Request) {
if errors.Cause(err) == storage.ErrImageUnknown { if errors.Cause(err) == storage.ErrImageUnknown {
utils.ImageNotFound(w, name, errors.Wrapf(err, "failed to find image %s", name)) utils.ImageNotFound(w, name, errors.Wrapf(err, "failed to find image %s", name))
} else { } else {
utils.Error(w, "failed to untag", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
} }
return return
} }
@ -619,8 +615,7 @@ func ImagesBatchRemove(w http.ResponseWriter, r *http.Request) {
}{} }{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -643,8 +638,7 @@ func ImagesRemove(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -662,12 +656,12 @@ func ImagesRemove(w http.ResponseWriter, r *http.Request) {
utils.WriteResponse(w, http.StatusOK, report) utils.WriteResponse(w, http.StatusOK, report)
case 1: case 1:
// 404 - no such image // 404 - no such image
utils.Error(w, "error removing image", http.StatusNotFound, errorhandling.JoinErrors(rmErrors)) utils.Error(w, http.StatusNotFound, errorhandling.JoinErrors(rmErrors))
case 2: case 2:
// 409 - conflict error (in use by containers) // 409 - conflict error (in use by containers)
utils.Error(w, "error removing image", http.StatusConflict, errorhandling.JoinErrors(rmErrors)) utils.Error(w, http.StatusConflict, errorhandling.JoinErrors(rmErrors))
default: default:
// 500 - internal error // 500 - internal error
utils.Error(w, "failed to remove image", http.StatusInternalServerError, errorhandling.JoinErrors(rmErrors)) utils.Error(w, http.StatusInternalServerError, errorhandling.JoinErrors(rmErrors))
} }
} }

View file

@ -41,8 +41,7 @@ func ImagesPull(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -53,7 +52,7 @@ func ImagesPull(w http.ResponseWriter, r *http.Request) {
// Make sure that the reference has no transport or the docker one. // Make sure that the reference has no transport or the docker one.
if err := utils.IsRegistryReference(query.Reference); err != nil { if err := utils.IsRegistryReference(query.Reference); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
@ -70,7 +69,7 @@ func ImagesPull(w http.ResponseWriter, r *http.Request) {
// Do the auth dance. // Do the auth dance.
authConf, authfile, err := auth.GetCredentials(r) authConf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -89,7 +88,7 @@ func ImagesPull(w http.ResponseWriter, r *http.Request) {
pullPolicy, err := config.ParsePullPolicy(query.PullPolicy) pullPolicy, err := config.ParsePullPolicy(query.PullPolicy)
if err != nil { if err != nil {
utils.Error(w, "failed to parse pull policy", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }

View file

@ -43,7 +43,7 @@ func ManifestCreate(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -52,7 +52,7 @@ func ManifestCreate(w http.ResponseWriter, r *http.Request) {
if name, ok := mux.Vars(r)["name"]; ok { if name, ok := mux.Vars(r)["name"]; ok {
n, err := url.QueryUnescape(name) n, err := url.QueryUnescape(name)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse name parameter %q", name)) errors.Wrapf(err, "failed to parse name parameter %q", name))
return return
} }
@ -60,7 +60,7 @@ func ManifestCreate(w http.ResponseWriter, r *http.Request) {
} }
if _, err := reference.ParseNormalizedNamed(query.Name); err != nil { if _, err := reference.ParseNormalizedNamed(query.Name); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "invalid image name %s", query.Name)) errors.Wrapf(err, "invalid image name %s", query.Name))
return return
} }
@ -123,11 +123,11 @@ func ManifestExists(w http.ResponseWriter, r *http.Request) {
imageEngine := abi.ImageEngine{Libpod: runtime} imageEngine := abi.ImageEngine{Libpod: runtime}
report, err := imageEngine.ManifestExists(r.Context(), name) report, err := imageEngine.ManifestExists(r.Context(), name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if !report.Value { if !report.Value {
utils.Error(w, "manifest not found", http.StatusNotFound, errors.New("manifest not found")) utils.Error(w, http.StatusNotFound, errors.New("manifest not found"))
return return
} }
utils.WriteResponse(w, http.StatusNoContent, "") utils.WriteResponse(w, http.StatusNoContent, "")
@ -140,13 +140,13 @@ func ManifestInspect(w http.ResponseWriter, r *http.Request) {
imageEngine := abi.ImageEngine{Libpod: runtime} imageEngine := abi.ImageEngine{Libpod: runtime}
rawManifest, err := imageEngine.ManifestInspect(r.Context(), name) rawManifest, err := imageEngine.ManifestInspect(r.Context(), name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
var schema2List manifest.Schema2List var schema2List manifest.Schema2List
if err := json.Unmarshal(rawManifest, &schema2List); err != nil { if err := json.Unmarshal(rawManifest, &schema2List); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -165,13 +165,13 @@ func ManifestAdd(w http.ResponseWriter, r *http.Request) {
Images []string Images []string
}{} }{}
if err := json.NewDecoder(r.Body).Decode(&query); err != nil { if err := json.NewDecoder(r.Body).Decode(&query); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
name := utils.GetName(r) name := utils.GetName(r)
if _, err := runtime.LibimageRuntime().LookupManifestList(name); err != nil { if _, err := runtime.LibimageRuntime().LookupManifestList(name); err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
@ -197,18 +197,18 @@ func ManifestRemoveDigest(w http.ResponseWriter, r *http.Request) {
} }
name := utils.GetName(r) name := utils.GetName(r)
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
manifestList, err := runtime.LibimageRuntime().LookupManifestList(name) manifestList, err := runtime.LibimageRuntime().LookupManifestList(name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
d, err := digest.Parse(query.Digest) d, err := digest.Parse(query.Digest)
if err != nil { if err != nil {
utils.Error(w, "invalid digest", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
if err := manifestList.RemoveInstance(d); err != nil { if err := manifestList.RemoveInstance(d); err != nil {
@ -232,19 +232,19 @@ func ManifestPushV3(w http.ResponseWriter, r *http.Request) {
// Add defaults here once needed. // Add defaults here once needed.
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if err := utils.IsRegistryReference(query.Destination); err != nil { if err := utils.IsRegistryReference(query.Destination); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
source := utils.GetName(r) source := utils.GetName(r)
authconf, authfile, err := auth.GetCredentials(r) authconf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -268,7 +268,7 @@ func ManifestPushV3(w http.ResponseWriter, r *http.Request) {
imageEngine := abi.ImageEngine{Libpod: runtime} imageEngine := abi.ImageEngine{Libpod: runtime}
digest, err := imageEngine.ManifestPush(context.Background(), source, query.Destination, options) digest, err := imageEngine.ManifestPush(context.Background(), source, query.Destination, options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "error pushing image %q", query.Destination)) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "error pushing image %q", query.Destination))
return return
} }
utils.WriteResponse(w, http.StatusOK, digest) utils.WriteResponse(w, http.StatusOK, digest)
@ -288,20 +288,20 @@ func ManifestPush(w http.ResponseWriter, r *http.Request) {
// Add defaults here once needed. // Add defaults here once needed.
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
destination := utils.GetVar(r, "destination") destination := utils.GetVar(r, "destination")
if err := utils.IsRegistryReference(destination); err != nil { if err := utils.IsRegistryReference(destination); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
authconf, authfile, err := auth.GetCredentials(r) authconf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, errors.Wrapf(err, "failed to parse registry header for %s", r.URL.String())) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse registry header for %s", r.URL.String()))
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -327,7 +327,7 @@ func ManifestPush(w http.ResponseWriter, r *http.Request) {
source := utils.GetName(r) source := utils.GetName(r)
digest, err := imageEngine.ManifestPush(context.Background(), source, destination, options) digest, err := imageEngine.ManifestPush(context.Background(), source, destination, options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "error pushing image %q", destination)) utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "error pushing image %q", destination))
return return
} }
utils.WriteResponse(w, http.StatusOK, handlers.IDResponse{ID: digest}) utils.WriteResponse(w, http.StatusOK, handlers.IDResponse{ID: digest})
@ -340,13 +340,13 @@ func ManifestModify(w http.ResponseWriter, r *http.Request) {
body := new(entities.ManifestModifyOptions) body := new(entities.ManifestModifyOptions)
if err := json.NewDecoder(r.Body).Decode(body); err != nil { if err := json.NewDecoder(r.Body).Decode(body); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
name := utils.GetName(r) name := utils.GetName(r)
if _, err := runtime.LibimageRuntime().LookupManifestList(name); err != nil { if _, err := runtime.LibimageRuntime().LookupManifestList(name); err != nil {
utils.Error(w, "Something went wrong.", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
@ -392,8 +392,7 @@ func ManifestModify(w http.ResponseWriter, r *http.Request) {
report.Images = append(report.Images, image) report.Images = append(report.Images, image)
} }
default: default:
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, fmt.Errorf("illegal operation %q for %q", body.Operation, r.URL.String()))
fmt.Errorf("illegal operation %q for %q", body.Operation, r.URL.String()))
return return
} }
@ -414,7 +413,7 @@ func ManifestDelete(w http.ResponseWriter, r *http.Request) {
name := utils.GetName(r) name := utils.GetName(r)
if _, err := runtime.LibimageRuntime().LookupManifestList(name); err != nil { if _, err := runtime.LibimageRuntime().LookupManifestList(name); err != nil {
utils.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }

View file

@ -20,7 +20,7 @@ func CreateNetwork(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
network := types.Network{} network := types.Network{}
if err := json.NewDecoder(r.Body).Decode(&network); err != nil { if err := json.NewDecoder(r.Body).Decode(&network); err != nil {
utils.Error(w, "unable to marshall input", http.StatusInternalServerError, errors.Wrap(err, "decode body")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "decode body"))
return return
} }
@ -36,7 +36,7 @@ func ListNetworks(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -62,7 +62,7 @@ func RemoveNetwork(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -80,7 +80,7 @@ func RemoveNetwork(w http.ResponseWriter, r *http.Request) {
if reports[0].Err != nil { if reports[0].Err != nil {
// If the network cannot be found, we return a 404. // If the network cannot be found, we return a 404.
if errors.Cause(reports[0].Err) == define.ErrNoSuchNetwork { if errors.Cause(reports[0].Err) == define.ErrNoSuchNetwork {
utils.Error(w, "Something went wrong", http.StatusNotFound, reports[0].Err) utils.Error(w, http.StatusNotFound, reports[0].Err)
return return
} }
} }
@ -95,7 +95,7 @@ func InspectNetwork(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -105,7 +105,7 @@ func InspectNetwork(w http.ResponseWriter, r *http.Request) {
reports, errs, err := ic.NetworkInspect(r.Context(), []string{name}, options) reports, errs, err := ic.NetworkInspect(r.Context(), []string{name}, options)
// If the network cannot be found, we return a 404. // If the network cannot be found, we return a 404.
if len(errs) > 0 { if len(errs) > 0 {
utils.Error(w, "Something went wrong", http.StatusNotFound, define.ErrNoSuchNetwork) utils.Error(w, http.StatusNotFound, define.ErrNoSuchNetwork)
return return
} }
if err != nil { if err != nil {
@ -121,7 +121,7 @@ func Connect(w http.ResponseWriter, r *http.Request) {
var netConnect entities.NetworkConnectOptions var netConnect entities.NetworkConnectOptions
if err := json.NewDecoder(r.Body).Decode(&netConnect); err != nil { if err := json.NewDecoder(r.Body).Decode(&netConnect); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
name := utils.GetName(r) name := utils.GetName(r)
@ -132,10 +132,10 @@ func Connect(w http.ResponseWriter, r *http.Request) {
return return
} }
if errors.Cause(err) == define.ErrNoSuchNetwork { if errors.Cause(err) == define.ErrNoSuchNetwork {
utils.Error(w, "network not found", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
utils.WriteResponse(w, http.StatusOK, "OK") utils.WriteResponse(w, http.StatusOK, "OK")
@ -149,11 +149,11 @@ func ExistsNetwork(w http.ResponseWriter, r *http.Request) {
ic := abi.ContainerEngine{Libpod: runtime} ic := abi.ContainerEngine{Libpod: runtime}
report, err := ic.NetworkExists(r.Context(), name) report, err := ic.NetworkExists(r.Context(), name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if !report.Value { if !report.Value {
utils.Error(w, "network not found", http.StatusNotFound, define.ErrNoSuchNetwork) utils.Error(w, http.StatusNotFound, define.ErrNoSuchNetwork)
return return
} }
utils.WriteResponse(w, http.StatusNoContent, "") utils.WriteResponse(w, http.StatusNoContent, "")
@ -165,7 +165,7 @@ func Prune(w http.ResponseWriter, r *http.Request) {
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -175,7 +175,7 @@ func Prune(w http.ResponseWriter, r *http.Request) {
ic := abi.ContainerEngine{Libpod: runtime} ic := abi.ContainerEngine{Libpod: runtime}
pruneReports, err := ic.NetworkPrune(r.Context(), pruneOptions) pruneReports, err := ic.NetworkPrune(r.Context(), pruneOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if pruneReports == nil { if pruneReports == nil {

View file

@ -37,8 +37,7 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -46,8 +45,7 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
for _, ipString := range query.StaticIPs { for _, ipString := range query.StaticIPs {
ip := net.ParseIP(ipString) ip := net.ParseIP(ipString)
if ip == nil { if ip == nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Errorf("Invalid IP address %s", ipString))
errors.Errorf("Invalid IP address %s", ipString))
return return
} }
staticIPs = append(staticIPs, ip) staticIPs = append(staticIPs, ip)
@ -57,8 +55,7 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
for _, macString := range query.StaticMACs { for _, macString := range query.StaticMACs {
mac, err := net.ParseMAC(macString) mac, err := net.ParseMAC(macString)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, err)
err)
return return
} }
staticMACs = append(staticMACs, mac) staticMACs = append(staticMACs, mac)
@ -67,7 +64,7 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
// Fetch the K8s YAML file from the body, and copy it to a temp file. // Fetch the K8s YAML file from the body, and copy it to a temp file.
tmpfile, err := ioutil.TempFile("", "libpod-play-kube.yml") tmpfile, err := ioutil.TempFile("", "libpod-play-kube.yml")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer func() { defer func() {
@ -79,16 +76,16 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
logrus.Warn(err) logrus.Warn(err)
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file"))
return return
} }
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error closing temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error closing temporary file"))
return return
} }
authConf, authfile, err := auth.GetCredentials(r) authConf, authfile, err := auth.GetCredentials(r)
if err != nil { if err != nil {
utils.Error(w, "failed to retrieve repository credentials", http.StatusBadRequest, err) utils.Error(w, http.StatusBadRequest, err)
return return
} }
defer auth.RemoveAuthfile(authfile) defer auth.RemoveAuthfile(authfile)
@ -119,7 +116,7 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
} }
report, err := containerEngine.PlayKube(r.Context(), tmpfile.Name(), options) report, err := containerEngine.PlayKube(r.Context(), tmpfile.Name(), options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error playing YAML file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error playing YAML file"))
return return
} }
utils.WriteResponse(w, http.StatusOK, report) utils.WriteResponse(w, http.StatusOK, report)
@ -129,7 +126,7 @@ func PlayKubeDown(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
tmpfile, err := ioutil.TempFile("", "libpod-play-kube.yml") tmpfile, err := ioutil.TempFile("", "libpod-play-kube.yml")
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile"))
return return
} }
defer func() { defer func() {
@ -141,18 +138,18 @@ func PlayKubeDown(w http.ResponseWriter, r *http.Request) {
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
logrus.Warn(err) logrus.Warn(err)
} }
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "unable to write archive to temporary file"))
return return
} }
if err := tmpfile.Close(); err != nil { if err := tmpfile.Close(); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error closing temporary file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error closing temporary file"))
return return
} }
containerEngine := abi.ContainerEngine{Libpod: runtime} containerEngine := abi.ContainerEngine{Libpod: runtime}
options := new(entities.PlayKubeDownOptions) options := new(entities.PlayKubeDownOptions)
report, err := containerEngine.PlayKubeDown(r.Context(), tmpfile.Name(), *options) report, err := containerEngine.PlayKubeDown(r.Context(), tmpfile.Name(), *options)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error tearing down YAML file")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error tearing down YAML file"))
return return
} }
utils.WriteResponse(w, http.StatusOK, report) utils.WriteResponse(w, http.StatusOK, report)

View file

@ -24,17 +24,20 @@ import (
) )
func PodCreate(w http.ResponseWriter, r *http.Request) { func PodCreate(w http.ResponseWriter, r *http.Request) {
const (
failedToDecodeSpecgen = "failed to decode specgen"
)
var ( var (
runtime = r.Context().Value(api.RuntimeKey).(*libpod.Runtime) runtime = r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
err error err error
) )
psg := specgen.PodSpecGenerator{InfraContainerSpec: &specgen.SpecGenerator{}} psg := specgen.PodSpecGenerator{InfraContainerSpec: &specgen.SpecGenerator{}}
if err := json.NewDecoder(r.Body).Decode(&psg); err != nil { if err := json.NewDecoder(r.Body).Decode(&psg); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to decode specgen")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, failedToDecodeSpecgen))
return return
} }
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to decode specgen")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, failedToDecodeSpecgen))
return return
} }
if !psg.NoInfra { if !psg.NoInfra {
@ -44,17 +47,17 @@ func PodCreate(w http.ResponseWriter, r *http.Request) {
infraOptions.SecurityOpt = psg.SecurityOpt infraOptions.SecurityOpt = psg.SecurityOpt
err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, &infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings) err = specgenutil.FillOutSpecGen(psg.InfraContainerSpec, &infraOptions, []string{}) // necessary for default values in many cases (userns, idmappings)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "error filling out specgen")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "error filling out specgen"))
return return
} }
out, err := json.Marshal(psg) // marshal our spec so the matching options can be unmarshaled into infra out, err := json.Marshal(psg) // marshal our spec so the matching options can be unmarshaled into infra
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to decode specgen")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, failedToDecodeSpecgen))
return return
} }
err = json.Unmarshal(out, psg.InfraContainerSpec) // unmarhal matching options err = json.Unmarshal(out, psg.InfraContainerSpec) // unmarhal matching options
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "failed to decode specgen")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, failedToDecodeSpecgen))
return return
} }
// a few extra that do not have the same json tags // a few extra that do not have the same json tags
@ -71,7 +74,7 @@ func PodCreate(w http.ResponseWriter, r *http.Request) {
if errors.Cause(err) == define.ErrPodExists { if errors.Cause(err) == define.ErrPodExists {
httpCode = http.StatusConflict httpCode = http.StatusConflict
} }
utils.Error(w, "Something went wrong.", httpCode, errors.Wrap(err, "failed to make pod")) utils.Error(w, httpCode, errors.Wrap(err, "failed to make pod"))
return return
} }
utils.WriteResponse(w, http.StatusCreated, handlers.IDResponse{ID: pod.ID()}) utils.WriteResponse(w, http.StatusCreated, handlers.IDResponse{ID: pod.ID()})
@ -82,8 +85,7 @@ func Pods(w http.ResponseWriter, r *http.Request) {
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -93,7 +95,7 @@ func Pods(w http.ResponseWriter, r *http.Request) {
} }
pods, err := containerEngine.PodPs(r.Context(), podPSOptions) pods, err := containerEngine.PodPs(r.Context(), podPSOptions)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
utils.WriteResponse(w, http.StatusOK, pods) utils.WriteResponse(w, http.StatusOK, pods)
@ -109,7 +111,7 @@ func PodInspect(w http.ResponseWriter, r *http.Request) {
} }
podData, err := pod.Inspect() podData, err := pod.Inspect()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -133,8 +135,7 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
name := utils.GetName(r) name := utils.GetName(r)
@ -146,7 +147,7 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
status, err := pod.GetPodStatus() status, err := pod.GetPodStatus()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if status != define.PodStateRunning { if status != define.PodStateRunning {
@ -160,7 +161,7 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
responses, stopError = pod.Stop(r.Context(), false) responses, stopError = pod.Stop(r.Context(), false)
} }
if stopError != nil && errors.Cause(stopError) != define.ErrPodPartialFail { if stopError != nil && errors.Cause(stopError) != define.ErrPodPartialFail {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
// Try to clean up the pod - but only warn on failure, it's nonfatal. // Try to clean up the pod - but only warn on failure, it's nonfatal.
@ -193,7 +194,7 @@ func PodStart(w http.ResponseWriter, r *http.Request) {
} }
status, err := pod.GetPodStatus() status, err := pod.GetPodStatus()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if status == define.PodStateRunning { if status == define.PodStateRunning {
@ -203,7 +204,7 @@ func PodStart(w http.ResponseWriter, r *http.Request) {
responses, err := pod.Start(r.Context()) responses, err := pod.Start(r.Context())
if err != nil && errors.Cause(err) != define.ErrPodPartialFail { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
utils.Error(w, "Something went wrong", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
@ -232,8 +233,7 @@ func PodDelete(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
name := utils.GetName(r) name := utils.GetName(r)
@ -243,7 +243,7 @@ func PodDelete(w http.ResponseWriter, r *http.Request) {
return return
} }
if err := runtime.RemovePod(r.Context(), pod, true, query.Force, query.Timeout); err != nil { if err := runtime.RemovePod(r.Context(), pod, true, query.Force, query.Timeout); err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
report := entities.PodRmReport{Id: pod.ID()} report := entities.PodRmReport{Id: pod.ID()}
@ -260,7 +260,7 @@ func PodRestart(w http.ResponseWriter, r *http.Request) {
} }
responses, err := pod.Restart(r.Context()) responses, err := pod.Restart(r.Context())
if err != nil && errors.Cause(err) != define.ErrPodPartialFail { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -313,7 +313,7 @@ func PodPause(w http.ResponseWriter, r *http.Request) {
} }
responses, err := pod.Pause(r.Context()) responses, err := pod.Pause(r.Context())
if err != nil && errors.Cause(err) != define.ErrPodPartialFail { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -339,7 +339,7 @@ func PodUnpause(w http.ResponseWriter, r *http.Request) {
} }
responses, err := pod.Unpause(r.Context()) responses, err := pod.Unpause(r.Context())
if err != nil && errors.Cause(err) != define.ErrPodPartialFail { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
utils.Error(w, "failed to pause pod", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -372,14 +372,12 @@ func PodTop(w http.ResponseWriter, r *http.Request) {
PsArgs: psArgs, PsArgs: psArgs,
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if query.Delay < 1 { if query.Delay < 1 {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, fmt.Errorf("\"delay\" parameter of value %d < 1", query.Delay))
fmt.Errorf("\"delay\" parameter of value %d < 1", query.Delay))
return return
} }
@ -456,8 +454,7 @@ func PodKill(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
if _, found := r.URL.Query()["signal"]; found { if _, found := r.URL.Query()["signal"]; found {
@ -478,7 +475,7 @@ func PodKill(w http.ResponseWriter, r *http.Request) {
logrus.Debugf("Killing pod %s with signal %d", pod.ID(), sig) logrus.Debugf("Killing pod %s with signal %d", pod.ID(), sig)
podStates, err := pod.Status() podStates, err := pod.Status()
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
hasRunning := false hasRunning := false
@ -489,14 +486,13 @@ func PodKill(w http.ResponseWriter, r *http.Request) {
} }
} }
if !hasRunning { if !hasRunning {
msg := fmt.Sprintf("Container %s is not running", pod.ID()) utils.Error(w, http.StatusConflict, errors.Errorf("cannot kill a pod with no running containers: %s", pod.ID()))
utils.Error(w, msg, http.StatusConflict, errors.Errorf("cannot kill a pod with no running containers: %s", pod.ID()))
return return
} }
responses, err := pod.Kill(r.Context(), uint(sig)) responses, err := pod.Kill(r.Context(), uint(sig))
if err != nil && errors.Cause(err) != define.ErrPodPartialFail { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
utils.Error(w, "failed to kill pod", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
@ -536,8 +532,7 @@ func PodStats(w http.ResponseWriter, r *http.Request) {
// default would go here // default would go here
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -554,7 +549,7 @@ func PodStats(w http.ResponseWriter, r *http.Request) {
// Error checks as documented in swagger. // Error checks as documented in swagger.
switch errors.Cause(err) { switch errors.Cause(err) {
case define.ErrNoSuchPod: case define.ErrNoSuchPod:
utils.Error(w, "one or more pods not found", http.StatusNotFound, err) utils.Error(w, http.StatusNotFound, err)
return return
case nil: case nil:
// Nothing to do. // Nothing to do.

View file

@ -35,8 +35,7 @@ func CreateSecret(w http.ResponseWriter, r *http.Request) {
} }
opts := entities.SecretCreateOptions{} opts := entities.SecretCreateOptions{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -24,13 +24,13 @@ func SystemPrune(w http.ResponseWriter, r *http.Request) {
}{} }{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, utils.Error(w, http.StatusBadRequest,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -30,7 +30,7 @@ func CreateVolume(w http.ResponseWriter, r *http.Request) {
// override any golang type defaults // override any golang type defaults
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -38,7 +38,7 @@ func CreateVolume(w http.ResponseWriter, r *http.Request) {
input := entities.VolumeCreateOptions{} input := entities.VolumeCreateOptions{}
// decode params from body // decode params from body
if err := json.NewDecoder(r.Body).Decode(&input); err != nil { if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "Decode()")) utils.Error(w, http.StatusInternalServerError, errors.Wrap(err, "Decode()"))
return return
} }
@ -112,7 +112,7 @@ func ListVolumes(w http.ResponseWriter, r *http.Request) {
) )
filterMap, err := util.PrepareFilters(r) filterMap, err := util.PrepareFilters(r)
if err != nil { if err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -187,7 +187,7 @@ func RemoveVolume(w http.ResponseWriter, r *http.Request) {
} }
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
utils.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, utils.Error(w, http.StatusInternalServerError,
errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -199,7 +199,7 @@ func RemoveVolume(w http.ResponseWriter, r *http.Request) {
} }
if err := runtime.RemoveVolume(r.Context(), vol, query.Force, query.Timeout); err != nil { if err := runtime.RemoveVolume(r.Context(), vol, query.Force, query.Timeout); err != nil {
if errors.Cause(err) == define.ErrVolumeBeingUsed { if errors.Cause(err) == define.ErrVolumeBeingUsed {
utils.Error(w, "volumes being used", http.StatusConflict, err) utils.Error(w, http.StatusConflict, err)
return return
} }
utils.InternalServerError(w, err) utils.InternalServerError(w, err)
@ -216,11 +216,11 @@ func ExistsVolume(w http.ResponseWriter, r *http.Request) {
ic := abi.ContainerEngine{Libpod: runtime} ic := abi.ContainerEngine{Libpod: runtime}
report, err := ic.VolumeExists(r.Context(), name) report, err := ic.VolumeExists(r.Context(), name)
if err != nil { if err != nil {
utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) utils.Error(w, http.StatusInternalServerError, err)
return return
} }
if !report.Value { if !report.Value {
utils.Error(w, "volume not found", http.StatusNotFound, define.ErrNoSuchVolume) utils.Error(w, http.StatusNotFound, define.ErrNoSuchVolume)
return return
} }
utils.WriteResponse(w, http.StatusNoContent, "") utils.WriteResponse(w, http.StatusNoContent, "")

View file

@ -39,7 +39,7 @@ func WaitContainerDocker(w http.ResponseWriter, r *http.Request) {
decoder := ctx.Value(api.DecoderKey).(*schema.Decoder) decoder := ctx.Value(api.DecoderKey).(*schema.Decoder)
if err = decoder.Decode(&query, r.URL.Query()); err != nil { if err = decoder.Decode(&query, r.URL.Query()); err != nil {
Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }
@ -107,7 +107,7 @@ func WaitContainerLibpod(w http.ResponseWriter, r *http.Request) {
decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder) decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
query := waitQueryLibpod{} query := waitQueryLibpod{}
if err := decoder.Decode(&query, r.URL.Query()); err != nil { if err := decoder.Decode(&query, r.URL.Query()); err != nil {
Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
return return
} }

View file

@ -1,7 +1,6 @@
package utils package utils
import ( import (
"fmt"
"net/http" "net/http"
"github.com/containers/podman/v4/libpod/define" "github.com/containers/podman/v4/libpod/define"
@ -22,7 +21,7 @@ var (
// //
// apiMessage and code must match the container API, and are sent to client // apiMessage and code must match the container API, and are sent to client
// err is logged on the system running the podman service // err is logged on the system running the podman service
func Error(w http.ResponseWriter, apiMessage string, code int, err error) { func Error(w http.ResponseWriter, code int, err error) {
// Log detailed message of what happened to machine running podman service // Log detailed message of what happened to machine running podman service
log.Infof("Request Failed(%s): %s", http.StatusText(code), err.Error()) log.Infof("Request Failed(%s): %s", http.StatusText(code), err.Error())
em := errorhandling.ErrorModel{ em := errorhandling.ErrorModel{
@ -37,70 +36,62 @@ func VolumeNotFound(w http.ResponseWriter, name string, err error) {
if errors.Cause(err) != define.ErrNoSuchVolume { if errors.Cause(err) != define.ErrNoSuchVolume {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such volume: %s", name) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func ContainerNotFound(w http.ResponseWriter, name string, err error) { func ContainerNotFound(w http.ResponseWriter, name string, err error) {
if errors.Cause(err) != define.ErrNoSuchCtr { if errors.Cause(err) != define.ErrNoSuchCtr {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such container: %s", name) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func ImageNotFound(w http.ResponseWriter, name string, err error) { func ImageNotFound(w http.ResponseWriter, name string, err error) {
if errors.Cause(err) != storage.ErrImageUnknown { if errors.Cause(err) != storage.ErrImageUnknown {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such image: %s", name) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func NetworkNotFound(w http.ResponseWriter, name string, err error) { func NetworkNotFound(w http.ResponseWriter, name string, err error) {
if errors.Cause(err) != define.ErrNoSuchNetwork { if errors.Cause(err) != define.ErrNoSuchNetwork {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such network: %s", name) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func PodNotFound(w http.ResponseWriter, name string, err error) { func PodNotFound(w http.ResponseWriter, name string, err error) {
if errors.Cause(err) != define.ErrNoSuchPod { if errors.Cause(err) != define.ErrNoSuchPod {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such pod: %s", name) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func SessionNotFound(w http.ResponseWriter, name string, err error) { func SessionNotFound(w http.ResponseWriter, name string, err error) {
if errors.Cause(err) != define.ErrNoSuchExecSession { if errors.Cause(err) != define.ErrNoSuchExecSession {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such exec session: %s", name) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func SecretNotFound(w http.ResponseWriter, nameOrID string, err error) { func SecretNotFound(w http.ResponseWriter, nameOrID string, err error) {
if errors.Cause(err).Error() != "no such secret" { if errors.Cause(err).Error() != "no such secret" {
InternalServerError(w, err) InternalServerError(w, err)
} }
msg := fmt.Sprintf("No such secret: %s", nameOrID) Error(w, http.StatusNotFound, err)
Error(w, msg, http.StatusNotFound, err)
} }
func ContainerNotRunning(w http.ResponseWriter, containerID string, err error) { func ContainerNotRunning(w http.ResponseWriter, containerID string, err error) {
msg := fmt.Sprintf("Container %s is not running", containerID) Error(w, http.StatusConflict, err)
Error(w, msg, http.StatusConflict, err)
} }
func InternalServerError(w http.ResponseWriter, err error) { func InternalServerError(w http.ResponseWriter, err error) {
Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError, err) Error(w, http.StatusInternalServerError, err)
} }
func BadRequest(w http.ResponseWriter, key string, value string, err error) { func BadRequest(w http.ResponseWriter, key string, value string, err error) {
e := errors.Wrapf(err, "failed to parse query parameter '%s': %q", key, value) e := errors.Wrapf(err, "failed to parse query parameter '%s': %q", key, value)
Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest, e) Error(w, http.StatusBadRequest, e)
} }
// UnsupportedParameter logs a given param by its string name as not supported. // UnsupportedParameter logs a given param by its string name as not supported.

View file

@ -31,5 +31,5 @@ func (s *APIServer) registerSwarmHandlers(r *mux.Router) error {
// this allows the client to decide if they still can talk to us // this allows the client to decide if they still can talk to us
func noSwarm(w http.ResponseWriter, r *http.Request) { func noSwarm(w http.ResponseWriter, r *http.Request) {
logrus.Errorf("%s is not a podman supported service", r.URL.String()) logrus.Errorf("%s is not a podman supported service", r.URL.String())
utils.Error(w, "node is not part of a swarm", http.StatusServiceUnavailable, errors.New("Podman does not support service: "+r.URL.String())) utils.Error(w, http.StatusServiceUnavailable, errors.New("Podman does not support service: "+r.URL.String()))
} }