diff options
-rw-r--r-- | pkg/api/handlers/compat/images.go | 16 | ||||
-rw-r--r-- | test/apiv2/10-images.at | 21 |
2 files changed, 22 insertions, 15 deletions
diff --git a/pkg/api/handlers/compat/images.go b/pkg/api/handlers/compat/images.go index 0b9367a17..4b7a2a71c 100644 --- a/pkg/api/handlers/compat/images.go +++ b/pkg/api/handlers/compat/images.go @@ -443,7 +443,7 @@ func ExportImages(w http.ResponseWriter, r *http.Request) { runtime := r.Context().Value("runtime").(*libpod.Runtime) query := struct { - Names string `schema:"names"` + Names []string `schema:"names"` }{ // This is where you can override the golang default value for one of fields } @@ -451,8 +451,16 @@ func ExportImages(w http.ResponseWriter, r *http.Request) { utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String())) return } - images := make([]string, 0) - images = append(images, strings.Split(query.Names, ",")...) + if len(query.Names) <= 0 { + utils.Error(w, "Something went wrong.", http.StatusBadRequest, fmt.Errorf("no images to download")) + return + } + if len(query.Names) > 1 { + utils.Error(w, "Something went wrong.", http.StatusNotImplemented, fmt.Errorf("getting multiple image is not supported yet")) + return + } + + images := query.Names tmpfile, err := ioutil.TempFile("", "api.tar") if err != nil { utils.Error(w, "Something went wrong.", http.StatusInternalServerError, errors.Wrap(err, "unable to create tempfile")) @@ -466,7 +474,7 @@ func ExportImages(w http.ResponseWriter, r *http.Request) { imageEngine := abi.ImageEngine{Libpod: runtime} - saveOptions := entities.ImageSaveOptions{Output: tmpfile.Name()} + saveOptions := entities.ImageSaveOptions{Format: "docker-archive", Output: tmpfile.Name()} if err := imageEngine.Save(r.Context(), images[0], images[1:], saveOptions); err != nil { utils.InternalServerError(w, err) return diff --git a/test/apiv2/10-images.at b/test/apiv2/10-images.at index a08393668..53702fa0a 100644 --- a/test/apiv2/10-images.at +++ b/test/apiv2/10-images.at @@ -140,16 +140,15 @@ t GET images/json?filters='{"reference":["test1"]}' 200 length=1 t DELETE libpod/images/test1:latest 200 -# Export more than one image -# FIXME FIXME FIXME, this doesn't work: -# not ok 64 [10-images] GET images/get?names=alpine,busybox : status -# expected: 200 -# actual: 500 -# expected: 200 -# not ok 65 [10-images] GET images/get?names=alpine,busybox : output - # expected: [POSIX tar archive] -# actual: {"cause":"no such image","message":"unable to find a name and tag match for busybox in repotags: no such image","response":500} -# -#t GET images/get?names=alpine,busybox 200 '[POSIX tar archive]' +t GET "images/get?names=alpine" 200 '[POSIX tar archive]' + +podman pull busybox +#t GET "images/get?names=alpine&names=busybox" 200 '[POSIX tar archive]' +#img_cnt=$(tar xf "$WORKDIR/curl.result.out" manifest.json -O | jq "length") +#is "$img_cnt" 2 "number of images in tar archive" +# TODO getting multiple images is not supported yet +# once it is supported replace the test below by the tests above +t GET "images/get?names=alpine&names=busybox" 501 \ + .cause="getting multiple image is not supported yet" # vim: filetype=sh |