summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--vendor/github.com/containers/common/libimage/pull.go66
-rw-r--r--vendor/modules.txt2
4 files changed, 34 insertions, 40 deletions
diff --git a/go.mod b/go.mod
index 3b03de501..17c0e7de1 100644
--- a/go.mod
+++ b/go.mod
@@ -12,7 +12,7 @@ require (
github.com/containernetworking/cni v1.0.1
github.com/containernetworking/plugins v1.0.1
github.com/containers/buildah v1.23.1
- github.com/containers/common v0.46.1-0.20220110152253-5476e2b8dc46
+ github.com/containers/common v0.46.1-0.20220112112017-31e8cc4aeeab
github.com/containers/conmon v2.0.20+incompatible
github.com/containers/image/v5 v5.17.1-0.20220106205022-73f80d60f0e1
github.com/containers/ocicrypt v1.1.2
diff --git a/go.sum b/go.sum
index a2c608d70..8cbeeba54 100644
--- a/go.sum
+++ b/go.sum
@@ -283,8 +283,8 @@ github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNB
github.com/containers/buildah v1.23.1 h1:Tpc9DsRuU+0Oofewpxb6OJVNQjCu7yloN/obUqzfDTY=
github.com/containers/buildah v1.23.1/go.mod h1:4WnrN0yrA7ab0ppgunixu2WM1rlD2rG8QLJAKbEkZlQ=
github.com/containers/common v0.44.2/go.mod h1:7sdP4vmI5Bm6FPFxb3lvAh1Iktb6tiO1MzjUzhxdoGo=
-github.com/containers/common v0.46.1-0.20220110152253-5476e2b8dc46 h1:LHeJjs8IJ4d9k8bCNs6L8lesi10Zk0LNnZ3fyxL6uXk=
-github.com/containers/common v0.46.1-0.20220110152253-5476e2b8dc46/go.mod h1:hXUU9gtA8V9dSLHhizp/k/s0ZXBzrnUSScUfrsw8z2Y=
+github.com/containers/common v0.46.1-0.20220112112017-31e8cc4aeeab h1:Pf1kwI8sZPiPMuen619noeltwtB2cIFC1iY42fE87AY=
+github.com/containers/common v0.46.1-0.20220112112017-31e8cc4aeeab/go.mod h1:hXUU9gtA8V9dSLHhizp/k/s0ZXBzrnUSScUfrsw8z2Y=
github.com/containers/conmon v2.0.20+incompatible h1:YbCVSFSCqFjjVwHTPINGdMX1F6JXHGTUje2ZYobNrkg=
github.com/containers/conmon v2.0.20+incompatible/go.mod h1:hgwZ2mtuDrppv78a/cOBNiCm6O0UMWGx1mu7P00nu5I=
github.com/containers/image/v5 v5.16.0/go.mod h1:XgTpfAPLRGOd1XYyCU5cISFr777bLmOerCSpt/v7+Q4=
diff --git a/vendor/github.com/containers/common/libimage/pull.go b/vendor/github.com/containers/common/libimage/pull.go
index 84ce107ee..ff93b6ed8 100644
--- a/vendor/github.com/containers/common/libimage/pull.go
+++ b/vendor/github.com/containers/common/libimage/pull.go
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io"
+ "runtime"
"strings"
"time"
@@ -446,12 +447,18 @@ func (r *Runtime) copySingleImageFromRegistry(ctx context.Context, imageName str
// If there's already a local image "localhost/foo", then we should
// attempt pulling that instead of doing the full short-name dance.
//
- // NOTE: we must ignore the platform of a local image when doing
- // lookups here, even if arch/os/variant is set. Some images set an
- // incorrect or even invalid platform (see containers/podman/issues/10682).
- // Doing the lookup while ignoring the platform checks prevents
- // redundantly downloading the same image.
- localImage, resolvedImageName, err = r.LookupImage(imageName, nil)
+ // NOTE that we only do platform checks if the specified values differ
+ // from the local platform. Unfortunately, there are many images used
+ // in the wild which don't set the correct value(s) in the config
+ // causing various issues such as containers/podman/issues/10682.
+ lookupImageOptions := &LookupImageOptions{Variant: options.Variant}
+ if options.Architecture != runtime.GOARCH {
+ lookupImageOptions.Architecture = options.Architecture
+ }
+ if options.OS != runtime.GOOS {
+ lookupImageOptions.OS = options.OS
+ }
+ localImage, resolvedImageName, err = r.LookupImage(imageName, lookupImageOptions)
if err != nil && errors.Cause(err) != storage.ErrImageUnknown {
logrus.Errorf("Looking up %s in local storage: %v", imageName, err)
}
@@ -464,37 +471,18 @@ func (r *Runtime) copySingleImageFromRegistry(ctx context.Context, imageName str
}
}
- customPlatform := false
- if len(options.Architecture)+len(options.OS)+len(options.Variant) > 0 {
- customPlatform = true
- // Unless the pull policy is "always", we must pessimistically assume
- // that the local image has an invalid architecture (see
- // containers/podman/issues/10682). Hence, whenever the user requests
- // a custom platform, set the pull policy to "always" to make sure
- // we're pulling down the image.
+ customPlatform := len(options.Architecture)+len(options.OS)+len(options.Variant) > 0
+ if customPlatform && pullPolicy != config.PullPolicyAlways && pullPolicy != config.PullPolicyNever {
+ // Unless the pull policy is always/never, we must
+ // pessimistically assume that the local image has an invalid
+ // architecture (see containers/podman/issues/10682). Hence,
+ // whenever the user requests a custom platform, set the pull
+ // policy to "newer" to make sure we're pulling down the
+ // correct image.
//
- // NOTE that this is will even override --pull={false,never}. This is
- // very likely a bug but a consistent one in Podman/Buildah and should
- // be addressed at a later point.
- if pullPolicy != config.PullPolicyAlways && pullPolicy != config.PullPolicyNever {
- switch {
- // User input clearly refer to a local image.
- case strings.HasPrefix(imageName, "localhost/"):
- logrus.Debugf("Enforcing pull policy to %q to support custom platform (arch: %q, os: %q, variant: %q)", "never", options.Architecture, options.OS, options.Variant)
- pullPolicy = config.PullPolicyNever
-
- // Image resolved to a local one, so let's still have a
- // look at the registries or aliases but use it
- // otherwise.
- case strings.HasPrefix(resolvedImageName, "localhost/"):
- logrus.Debugf("Enforcing pull policy to %q to support custom platform (arch: %q, os: %q, variant: %q)", "newer", options.Architecture, options.OS, options.Variant)
- pullPolicy = config.PullPolicyNewer
-
- default:
- logrus.Debugf("Enforcing pull policy to %q to support custom platform (arch: %q, os: %q, variant: %q)", "always", options.Architecture, options.OS, options.Variant)
- pullPolicy = config.PullPolicyAlways
- }
- }
+ // NOTE that this is will even override --pull={false,never}.
+ pullPolicy = config.PullPolicyNewer
+ logrus.Debugf("Enforcing pull policy to %q to pull custom platform (arch: %q, os: %q, variant: %q) - local image may mistakenly specify wrong platform", pullPolicy, options.Architecture, options.OS, options.Variant)
}
if pullPolicy == config.PullPolicyNever {
@@ -540,6 +528,12 @@ func (r *Runtime) copySingleImageFromRegistry(ctx context.Context, imageName str
sys := r.systemContextCopy()
resolved, err := shortnames.Resolve(sys, imageName)
if err != nil {
+ // TODO: that is a too big of a hammer since we should only
+ // ignore errors that indicate that there's no alias and no
+ // USRs. Must be addressed in c/image first.
+ if localImage != nil && pullPolicy == config.PullPolicyNewer {
+ return []string{resolvedImageName}, nil
+ }
return nil, err
}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 9f3270b53..b8a86a198 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -106,7 +106,7 @@ github.com/containers/buildah/pkg/rusage
github.com/containers/buildah/pkg/sshagent
github.com/containers/buildah/pkg/util
github.com/containers/buildah/util
-# github.com/containers/common v0.46.1-0.20220110152253-5476e2b8dc46
+# github.com/containers/common v0.46.1-0.20220112112017-31e8cc4aeeab
## explicit
github.com/containers/common/libimage
github.com/containers/common/libimage/manifests