improve localResolve
Signed-off-by: yanxuean <yan.xuean@zte.com.cn>
This commit is contained in:
parent
cbe7f0dd5a
commit
b4ebf2d7a7
@ -28,7 +28,6 @@ import (
|
|||||||
"github.com/containerd/cgroups"
|
"github.com/containerd/cgroups"
|
||||||
"github.com/containerd/containerd"
|
"github.com/containerd/containerd"
|
||||||
"github.com/containerd/containerd/content"
|
"github.com/containerd/containerd/content"
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/docker/distribution/reference"
|
"github.com/docker/distribution/reference"
|
||||||
imagedigest "github.com/opencontainers/go-digest"
|
imagedigest "github.com/opencontainers/go-digest"
|
||||||
"github.com/opencontainers/image-spec/identity"
|
"github.com/opencontainers/image-spec/identity"
|
||||||
@ -205,34 +204,41 @@ func getRepoDigestAndTag(namedRef reference.Named, digest imagedigest.Digest, sc
|
|||||||
|
|
||||||
// localResolve resolves image reference locally and returns corresponding image metadata. It returns
|
// localResolve resolves image reference locally and returns corresponding image metadata. It returns
|
||||||
// nil without error if the reference doesn't exist.
|
// nil without error if the reference doesn't exist.
|
||||||
func (c *criContainerdService) localResolve(ctx context.Context, ref string) (*imagestore.Image, error) {
|
func (c *criContainerdService) localResolve(ctx context.Context, refOrID string) (*imagestore.Image, error) {
|
||||||
_, err := imagedigest.Parse(ref)
|
getImageID := func(refOrId string) string {
|
||||||
if err != nil {
|
if _, err := imagedigest.Parse(refOrID); err == nil {
|
||||||
|
return refOrID
|
||||||
|
}
|
||||||
|
|
||||||
|
return func(ref string) string {
|
||||||
// ref is not image id, try to resolve it locally.
|
// ref is not image id, try to resolve it locally.
|
||||||
normalized, err := util.NormalizeImageRef(ref)
|
normalized, err := util.NormalizeImageRef(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid image reference %q: %v", ref, err)
|
return ""
|
||||||
}
|
}
|
||||||
image, err := c.client.GetImage(ctx, normalized.String())
|
image, err := c.client.GetImage(ctx, normalized.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errdefs.IsNotFound(err) {
|
return ""
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("failed to get image from containerd: %v", err)
|
|
||||||
}
|
}
|
||||||
desc, err := image.Config(ctx)
|
desc, err := image.Config(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to get image config descriptor: %v", err)
|
return ""
|
||||||
}
|
}
|
||||||
ref = desc.Digest.String()
|
return desc.Digest.String()
|
||||||
|
}(refOrID)
|
||||||
|
}
|
||||||
|
|
||||||
|
imageID := getImageID(refOrID)
|
||||||
|
if imageID == "" {
|
||||||
|
// Try to treat ref as imageID
|
||||||
|
imageID = refOrID
|
||||||
}
|
}
|
||||||
imageID := ref
|
|
||||||
image, err := c.imageStore.Get(imageID)
|
image, err := c.imageStore.Get(imageID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == store.ErrNotExist {
|
if err == store.ErrNotExist {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("failed to get image %q metadata: %v", imageID, err)
|
return nil, fmt.Errorf("failed to get image %q : %v", imageID, err)
|
||||||
}
|
}
|
||||||
return &image, nil
|
return &image, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user