From 1c2d245c47cf087471556cdde77b8265c4386b93 Mon Sep 17 00:00:00 2001 From: Miloslav Trmač Date: Sat, 28 Jul 2018 08:18:57 +0200 Subject: Introduce Runtime.pullImageFromReference, call it in Runtime.FromImageReference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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č Closes: #1176 Approved by: rhatdan --- libpod/image/image.go | 2 +- libpod/image/pull.go | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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) -- cgit v1.2.3-54-g00ecf