From 92b3fbf4e884bec1127779121b68414b292cd057 Mon Sep 17 00:00:00 2001 From: Jimmi Dyson Date: Wed, 9 Feb 2022 17:36:46 +0000 Subject: [PATCH] feat: Fall back to image from local Docker runtime If the requested image does not exist in a remote registry, then use the image from the local Docker runtime if it is available there. --- cmd/create/imagebundle/image_bundle.go | 37 +++++++++++++++++++------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/cmd/create/imagebundle/image_bundle.go b/cmd/create/imagebundle/image_bundle.go index d39ead24..bd8b6f45 100644 --- a/cmd/create/imagebundle/image_bundle.go +++ b/cmd/create/imagebundle/image_bundle.go @@ -134,15 +134,26 @@ func NewCommand(out output.Output) *cobra.Command { ), ) + srcSkopeoScheme := "docker://" srcImageManifestList, skopeoStdout, skopeoStderr, err := skopeoRunner.InspectManifest( - context.TODO(), - fmt.Sprintf("docker://%s", srcImageName), + context.Background(), + fmt.Sprintf("%s%s", srcSkopeoScheme, srcImageName), ) if err != nil { - out.EndOperation(false) - out.Infof("---skopeo stdout---:\n%s", skopeoStdout) - out.Infof("---skopeo stderr---:\n%s", skopeoStderr) - return err + srcSkopeoScheme = "docker-daemon:" + srcDaemonImageManifestList, skopeoDaemonStdout, skopeoDaemonStderr, err := skopeoRunner.InspectManifest( + context.Background(), + fmt.Sprintf("%s%s", srcSkopeoScheme, srcImageName), + ) + if err != nil { + out.EndOperation(false) + out.Infof("---skopeo stdout---:\n%s", skopeoStdout) + out.Infof("---skopeo stderr---:\n%s", skopeoStderr) + return err + } + srcImageManifestList = srcDaemonImageManifestList + skopeoStdout = append(skopeoStdout, skopeoDaemonStdout...) + skopeoStderr = append(skopeoStderr, skopeoDaemonStderr...) } out.V(4).Infof("---skopeo stdout---:\n%s", skopeoStdout) out.V(4).Infof("---skopeo stderr---:\n%s", skopeoStderr) @@ -179,13 +190,19 @@ func NewCommand(out output.Output) *cobra.Command { } } + srcImageToCopy := fmt.Sprintf("%s/%s@%s", registryName, + imageName, + platformManifest.Digest) + if srcSkopeoScheme != "docker://" { + srcImageToCopy = srcImageName + } + skopeoStdout, skopeoStderr, err := skopeoRunner.Copy( context.TODO(), fmt.Sprintf( - "docker://%s/%s@%s", - registryName, - imageName, - platformManifest.Digest, + "%s%s", + srcSkopeoScheme, + srcImageToCopy, ), fmt.Sprintf( "docker://%s/%s@%s",