mirror of
https://github.com/containers/podman.git
synced 2025-10-14 09:45:59 +08:00
Merge pull request #8178 from rhatdan/exists
NewFromLocal can return multiple images
This commit is contained in:
@ -14,6 +14,9 @@ var (
|
||||
// ErrNoSuchImage indicates the requested image does not exist
|
||||
ErrNoSuchImage = errors.New("no such image")
|
||||
|
||||
// ErrMultipleImages found multiple name and tag matches
|
||||
ErrMultipleImages = errors.New("found multiple name and tag matches")
|
||||
|
||||
// ErrNoSuchTag indicates the requested image tag does not exist
|
||||
ErrNoSuchTag = errors.New("no such tag")
|
||||
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/signature"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/podman/v2/libpod/define"
|
||||
"github.com/containers/storage"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@ -42,7 +43,7 @@ func findImageInRepotags(search imageParts, images []*Image) (*storage.Image, er
|
||||
if len(results) == 0 {
|
||||
return &storage.Image{}, errors.Errorf("unable to find a name and tag match for %s in repotags", searchName)
|
||||
} else if len(results) > 1 {
|
||||
return &storage.Image{}, errors.Errorf("found multiple name and tag matches for %s in repotags", searchName)
|
||||
return &storage.Image{}, errors.Wrapf(define.ErrMultipleImages, searchName)
|
||||
}
|
||||
return results[0], nil
|
||||
}
|
||||
|
@ -44,11 +44,16 @@ func ImageExists(w http.ResponseWriter, r *http.Request) {
|
||||
runtime := r.Context().Value("runtime").(*libpod.Runtime)
|
||||
name := utils.GetName(r)
|
||||
|
||||
_, err := runtime.ImageRuntime().NewFromLocal(name)
|
||||
ir := abi.ImageEngine{Libpod: runtime}
|
||||
report, err := ir.Exists(r.Context(), name)
|
||||
if err != nil {
|
||||
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(err, "failed to find image %s", name))
|
||||
return
|
||||
}
|
||||
if !report.Value {
|
||||
utils.Error(w, "Something went wrong.", http.StatusNotFound, errors.Wrapf(nil, "failed to find image %s", name))
|
||||
return
|
||||
}
|
||||
utils.WriteResponse(w, http.StatusNoContent, "")
|
||||
}
|
||||
|
||||
|
@ -39,8 +39,14 @@ const SignatureStoreDir = "/var/lib/containers/sigstore"
|
||||
|
||||
func (ir *ImageEngine) Exists(_ context.Context, nameOrID string) (*entities.BoolReport, error) {
|
||||
_, err := ir.Libpod.ImageRuntime().NewFromLocal(nameOrID)
|
||||
if err != nil && errors.Cause(err) != define.ErrNoSuchImage {
|
||||
return nil, err
|
||||
if err != nil {
|
||||
if errors.Cause(err) == define.ErrMultipleImages {
|
||||
return &entities.BoolReport{Value: true}, nil
|
||||
} else {
|
||||
if errors.Cause(err) != define.ErrNoSuchImage {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
return &entities.BoolReport{Value: err == nil}, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user