summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2018-07-28 08:18:57 +0200
committerAtomic Bot <atomic-devel@projectatomic.io>2018-08-01 18:22:59 +0000
commit1c2d245c47cf087471556cdde77b8265c4386b93 (patch)
tree75a895a82529da24ab5dd5db1defbac3158f0511
parent0d4a5549d65ee390f59169b3efef2f0e6c108618 (diff)
downloadpodman-1c2d245c47cf087471556cdde77b8265c4386b93.tar.gz
podman-1c2d245c47cf087471556cdde77b8265c4386b93.tar.bz2
podman-1c2d245c47cf087471556cdde77b8265c4386b93.zip
Introduce Runtime.pullImageFromReference, call it in Runtime.FromImageReference
FINALLY, (podman load) can pass through an ImageReference directly from loadCmd all the way to pullGoalNamesFromImageReference, making sure not to trigger the docker-like reference parsing heuristics. Signed-off-by: Miloslav Trmač <mitr@redhat.com> Closes: #1176 Approved by: rhatdan
-rw-r--r--libpod/image/image.go2
-rw-r--r--libpod/image/pull.go11
2 files changed, 12 insertions, 1 deletions
diff --git a/libpod/image/image.go b/libpod/image/image.go
index 964a13585..56fe58e7f 100644
--- a/libpod/image/image.go
+++ b/libpod/image/image.go
@@ -167,7 +167,7 @@ func (ir *Runtime) LoadFromArchiveReference(ctx context.Context, srcRef types.Im
if signaturePolicyPath == "" {
signaturePolicyPath = ir.SignaturePolicyPath
}
- imageNames, err := ir.pullImage(ctx, transports.ImageName(srcRef), writer, "", signaturePolicyPath, SigningOptions{}, &DockerRegistryOptions{}, false)
+ imageNames, err := ir.pullImageFromReference(ctx, srcRef, writer, "", signaturePolicyPath, SigningOptions{}, &DockerRegistryOptions{}, false)
if err != nil {
return nil, errors.Wrapf(err, "unable to pull %s", transports.ImageName(srcRef))
}
diff --git a/libpod/image/pull.go b/libpod/image/pull.go
index 4240d72d8..1a77d89c8 100644
--- a/libpod/image/pull.go
+++ b/libpod/image/pull.go
@@ -201,6 +201,7 @@ func (ir *Runtime) pullGoalFromImageReference(ctx context.Context, srcRef types.
}
// pullImage pulls an image based on input name, which may involve from configured registries.
+// Use pullImageFromReference if the source is known precisely.
func (ir *Runtime) pullImage(ctx context.Context, inputName string, writer io.Writer, authfile, signaturePolicyPath string, signingOptions SigningOptions, dockerOptions *DockerRegistryOptions, forceSecure bool) ([]string, error) {
var goal pullGoal
sc := GetSystemContext(signaturePolicyPath, authfile, false)
@@ -220,6 +221,16 @@ func (ir *Runtime) pullImage(ctx context.Context, inputName string, writer io.Wr
return ir.doPullImage(ctx, sc, goal, writer, signingOptions, dockerOptions, forceSecure)
}
+// pullImageFromReference pulls an image from a types.imageReference.
+func (ir *Runtime) pullImageFromReference(ctx context.Context, srcRef types.ImageReference, writer io.Writer, authfile, signaturePolicyPath string, signingOptions SigningOptions, dockerOptions *DockerRegistryOptions, forceSecure bool) ([]string, error) {
+ sc := GetSystemContext(signaturePolicyPath, authfile, false)
+ goal, err := ir.pullGoalFromImageReference(ctx, srcRef, transports.ImageName(srcRef), sc)
+ if err != nil {
+ return nil, errors.Wrapf(err, "error determining pull goal for image %q", transports.ImageName(srcRef))
+ }
+ return ir.doPullImage(ctx, sc, goal, writer, signingOptions, dockerOptions, forceSecure)
+}
+
// doPullImage is an internal helper interpreting pullGoal. Almost everyone should call one of the callers of doPullImage instead.
func (ir *Runtime) doPullImage(ctx context.Context, sc *types.SystemContext, goal pullGoal, writer io.Writer, signingOptions SigningOptions, dockerOptions *DockerRegistryOptions, forceSecure bool) ([]string, error) {
policyContext, err := getPolicyContext(sc)