From e1567dd1f291bc2264c6423afa17a4084ee900ee Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Mon, 18 May 2020 10:07:44 -0400 Subject: [PATCH] release: Mirroring from custom directory via oc adm release mirror fails The command fails when specifying a non-default from directory because the from directory was not passed to either extract or mirror. Add that transformation. Also include the Parallel options as good practice even if they are not heavily used in these flows. --- pkg/cli/admin/release/extract.go | 4 +++- pkg/cli/admin/release/mirror.go | 5 ++++- pkg/cli/admin/release/new.go | 5 ++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pkg/cli/admin/release/extract.go b/pkg/cli/admin/release/extract.go index c00b003467..90541deb38 100644 --- a/pkg/cli/admin/release/extract.go +++ b/pkg/cli/admin/release/extract.go @@ -107,7 +107,8 @@ type ExtractOptions struct { Output string - From string + FromDir string + From string Tools bool Command string @@ -193,6 +194,7 @@ func (o *ExtractOptions) Run() error { return err } opts := extract.NewOptions(genericclioptions.IOStreams{Out: o.Out, ErrOut: o.ErrOut}) + opts.ParallelOptions = o.ParallelOptions opts.SecurityOptions = o.SecurityOptions opts.FileDir = o.FileDir diff --git a/pkg/cli/admin/release/mirror.go b/pkg/cli/admin/release/mirror.go index 93dcbd0fc2..dfb1c0b2a8 100644 --- a/pkg/cli/admin/release/mirror.go +++ b/pkg/cli/admin/release/mirror.go @@ -145,7 +145,7 @@ func NewMirror(f kcmdutil.Factory, parentName string, streams genericclioptions. flags.StringVar(&o.From, "from", o.From, "Image containing the release payload.") flags.StringVar(&o.To, "to", o.To, "An image repository to push to.") flags.StringVar(&o.ToImageStream, "to-image-stream", o.ToImageStream, "An image stream to tag images into.") - flags.StringVar(&o.FromDir, "from-dir", o.ToDir, "A directory to import images from.") + flags.StringVar(&o.FromDir, "from-dir", o.FromDir, "A directory to import images from.") flags.StringVar(&o.ToDir, "to-dir", o.ToDir, "A directory to export images to.") flags.BoolVar(&o.ToMirror, "to-mirror", o.ToMirror, "Output the mirror mappings instead of mirroring.") flags.BoolVar(&o.DryRun, "dry-run", o.DryRun, "Display information about the mirror without actually executing it.") @@ -464,11 +464,13 @@ func (o *MirrorOptions) Run() error { // load image references buf := &bytes.Buffer{} extractOpts := NewExtractOptions(genericclioptions.IOStreams{Out: buf, ErrOut: o.ErrOut}, true) + extractOpts.ParallelOptions = o.ParallelOptions extractOpts.SecurityOptions = o.SecurityOptions extractOpts.ImageMetadataCallback = func(m *extract.Mapping, dgst, contentDigest digest.Digest, config *dockerv1client.DockerImageConfig) { releaseDigest = contentDigest.String() verifier.Verify(dgst, contentDigest) } + extractOpts.FileDir = o.FromDir extractOpts.From = o.From extractOpts.File = "image-references" if err := extractOpts.Run(); err != nil { @@ -728,6 +730,7 @@ func (o *MirrorOptions) Run() error { opts.SecurityOptions = o.SecurityOptions opts.ParallelOptions = o.ParallelOptions opts.Mappings = mappings + opts.FromFileDir = o.FromDir opts.FileDir = o.ToDir opts.DryRun = o.DryRun opts.ManifestUpdateCallback = func(registry string, manifests map[digest.Digest]digest.Digest) error { diff --git a/pkg/cli/admin/release/new.go b/pkg/cli/admin/release/new.go index 66430c2396..5c83400b5b 100644 --- a/pkg/cli/admin/release/new.go +++ b/pkg/cli/admin/release/new.go @@ -391,6 +391,7 @@ func (o *NewOptions) Run() error { buf := &bytes.Buffer{} extractOpts := extract.NewOptions(genericclioptions.IOStreams{Out: buf, ErrOut: o.ErrOut}) + extractOpts.ParallelOptions = o.ParallelOptions extractOpts.SecurityOptions = o.SecurityOptions extractOpts.OnlyFiles = true extractOpts.Mappings = []extract.Mapping{ @@ -926,9 +927,9 @@ func (o *NewOptions) extractManifests(is *imageapi.ImageStream, name string, met verifier := imagemanifest.NewVerifier() var lock sync.Mutex opts := extract.NewOptions(genericclioptions.IOStreams{Out: o.Out, ErrOut: o.ErrOut}) + opts.ParallelOptions = o.ParallelOptions opts.SecurityOptions = o.SecurityOptions opts.OnlyFiles = true - opts.ParallelOptions = o.ParallelOptions opts.ImageMetadataCallback = func(m *extract.Mapping, dgst, contentDigest digest.Digest, config *dockerv1client.DockerImageConfig) { verifier.Verify(dgst, contentDigest) @@ -1053,6 +1054,7 @@ func (o *NewOptions) mirrorImages(is *imageapi.ImageStream) error { opts.ImageStream = copied opts.To = o.Mirror opts.SkipRelease = true + opts.ParallelOptions = o.ParallelOptions opts.SecurityOptions = o.SecurityOptions if err := opts.Run(); err != nil { @@ -1183,6 +1185,7 @@ func (o *NewOptions) write(r io.Reader, is *imageapi.ImageStream, now time.Time) verifier := imagemanifest.NewVerifier() options := imageappend.NewAppendImageOptions(genericclioptions.IOStreams{Out: ioutil.Discard, ErrOut: o.ErrOut}) + options.ParallelOptions = o.ParallelOptions options.SecurityOptions = o.SecurityOptions options.DryRun = o.DryRun options.From = toImageBase