mirror of
https://github.com/containers/podman.git
synced 2025-11-01 19:21:04 +08:00
Update vendor of containers/buildah
Changes since 2022-05-31: - add --omit-history option (buildah PR 4028) Signed-off-by: Ed Santiago <santiago@redhat.com> Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
74
vendor/github.com/containers/common/libimage/runtime.go
generated
vendored
74
vendor/github.com/containers/common/libimage/runtime.go
generated
vendored
@ -182,6 +182,9 @@ type LookupImageOptions struct {
|
||||
// Lookup an image matching the specified variant.
|
||||
Variant string
|
||||
|
||||
// Controls the behavior when checking the platform of an image.
|
||||
PlatformPolicy PlatformPolicy
|
||||
|
||||
// If set, do not look for items/instances in the manifest list that
|
||||
// match the current platform but return the manifest list as is.
|
||||
// only check for manifest list, return ErrNotAManifestList if not found.
|
||||
@ -378,21 +381,36 @@ func (r *Runtime) lookupImageInLocalStorage(name, candidate string, options *Loo
|
||||
image = instance
|
||||
}
|
||||
|
||||
matches, err := r.imageReferenceMatchesContext(ref, options)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// NOTE: if the user referenced by ID we must optimistically assume
|
||||
// that they know what they're doing. Given, we already did the
|
||||
// manifest limbo above, we may already have resolved it.
|
||||
if !matches && !strings.HasPrefix(image.ID(), candidate) {
|
||||
return nil, nil
|
||||
}
|
||||
// Also print the string within the storage transport. That may aid in
|
||||
// debugging when using additional stores since we see explicitly where
|
||||
// the store is and which driver (options) are used.
|
||||
logrus.Debugf("Found image %q as %q in local containers storage (%s)", name, candidate, ref.StringWithinTransport())
|
||||
|
||||
// Do not perform any further platform checks if the image was
|
||||
// requested by ID. In that case, we must assume that the user/tool
|
||||
// know what they're doing.
|
||||
if strings.HasPrefix(image.ID(), candidate) {
|
||||
return image, nil
|
||||
}
|
||||
|
||||
// Ignore the (fatal) error since the image may be corrupted, which
|
||||
// will bubble up at other places. During lookup, we just return it as
|
||||
// is.
|
||||
if matchError, customPlatform, _ := image.matchesPlatform(context.Background(), options.Architecture, options.OS, options.Variant); matchError != nil {
|
||||
if customPlatform {
|
||||
logrus.Debugf("%v", matchError)
|
||||
// Return nil if the user clearly requested a custom
|
||||
// platform and the located image does not match.
|
||||
return nil, nil
|
||||
}
|
||||
switch options.PlatformPolicy {
|
||||
case PlatformPolicyDefault:
|
||||
logrus.Debugf("%v", matchError)
|
||||
case PlatformPolicyWarn:
|
||||
logrus.Warnf("%v", matchError)
|
||||
}
|
||||
}
|
||||
|
||||
return image, nil
|
||||
}
|
||||
|
||||
@ -497,40 +515,6 @@ func (r *Runtime) ResolveName(name string) (string, error) {
|
||||
return normalized.String(), nil
|
||||
}
|
||||
|
||||
// imageReferenceMatchesContext return true if the specified reference matches
|
||||
// the platform (os, arch, variant) as specified by the lookup options.
|
||||
func (r *Runtime) imageReferenceMatchesContext(ref types.ImageReference, options *LookupImageOptions) (bool, error) {
|
||||
if options.Architecture+options.OS+options.Variant == "" {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
img, err := ref.NewImage(ctx, &r.systemContext)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer img.Close()
|
||||
data, err := img.Inspect(ctx)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if options.Architecture != "" && options.Architecture != data.Architecture {
|
||||
logrus.Debugf("architecture %q does not match architecture %q of image %s", options.Architecture, data.Architecture, ref)
|
||||
return false, nil
|
||||
}
|
||||
if options.OS != "" && options.OS != data.Os {
|
||||
logrus.Debugf("OS %q does not match OS %q of image %s", options.OS, data.Os, ref)
|
||||
return false, nil
|
||||
}
|
||||
if options.Variant != "" && options.Variant != data.Variant {
|
||||
logrus.Debugf("variant %q does not match variant %q of image %s", options.Variant, data.Variant, ref)
|
||||
return false, nil
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// IsExternalContainerFunc allows for checking whether the specified container
|
||||
// is an external one. The definition of an external container can be set by
|
||||
// callers.
|
||||
|
||||
Reference in New Issue
Block a user