From 7635353ed12fdcb725855b1d4165cfec8dc10e16 Mon Sep 17 00:00:00 2001 From: Luigi Mario Zuccarelli Date: Wed, 29 Mar 2023 09:20:08 +0200 Subject: [PATCH] [release-4.12] OCPBUGS-863: Add skip pruning flag and logic (#591) * Remove "unsupported" wording from info on console * Add skip pruning flag and logic * Update for suggestion made in review * Fixed failing unit test --- pkg/cli/mirror/manifests_test.go | 2 +- pkg/cli/mirror/mirror.go | 4 ++++ pkg/cli/mirror/options.go | 2 ++ pkg/cli/mirror/prune.go | 17 +++++++++++------ 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pkg/cli/mirror/manifests_test.go b/pkg/cli/mirror/manifests_test.go index 024eefc09..c943ed0a7 100644 --- a/pkg/cli/mirror/manifests_test.go +++ b/pkg/cli/mirror/manifests_test.go @@ -458,7 +458,7 @@ func TestICSPGeneration(t *testing.T) { // for loop replaces require.Equal(test.expected, icsps): order elements in Spec.RepositoryDigestMirrors // was making the test fail for ind, icsp := range test.expected { - require.Equal(t, icsp.Spec.RepositoryDigestMirrors, icsps[ind].Spec.RepositoryDigestMirrors) + require.ElementsMatch(t, icsp.Spec.RepositoryDigestMirrors, icsps[ind].Spec.RepositoryDigestMirrors) require.Equal(t, icsp.Labels, icsps[ind].Labels) require.Equal(t, icsp.Name, icsps[ind].Name) } diff --git a/pkg/cli/mirror/mirror.go b/pkg/cli/mirror/mirror.go index 20fcf28d0..a49c3eef3 100644 --- a/pkg/cli/mirror/mirror.go +++ b/pkg/cli/mirror/mirror.go @@ -262,6 +262,10 @@ func (o *MirrorOptions) Validate() error { } } + if o.SkipPruning { + klog.Infof("using --skip-pruning flag - pruning will be skipped") + } + return nil } diff --git a/pkg/cli/mirror/options.go b/pkg/cli/mirror/options.go index f9fb1ca4d..fdad3b639 100644 --- a/pkg/cli/mirror/options.go +++ b/pkg/cli/mirror/options.go @@ -30,6 +30,7 @@ type MirrorOptions struct { SkipCleanup bool SkipMissing bool SkipMetadataCheck bool + SkipPruning bool ContinueOnError bool IgnoreHistory bool MaxPerRegistry int @@ -73,6 +74,7 @@ func (o *MirrorOptions) BindFlags(fs *pflag.FlagSet) { fs.StringVar(&o.OCIRegistriesConfig, "oci-registries-config", o.OCIRegistriesConfig, "Registries config file location (used only with --use-oci-feature flag)") fs.BoolVar(&o.OCIInsecureSignaturePolicy, "oci-insecure-signature-policy", o.OCIInsecureSignaturePolicy, "If set, OCI catalog push will not try to push signatures") fs.IntVar(&o.MaxNestedPaths, "max-nested-paths", 2, "Number of nested paths, for destination registries that limit nested paths") + fs.BoolVar(&o.SkipPruning, "skip-pruning", o.SkipPruning, "If set, will disable pruning globally") } func (o *MirrorOptions) init() { diff --git a/pkg/cli/mirror/prune.go b/pkg/cli/mirror/prune.go index 527a394ea..a436ff84f 100644 --- a/pkg/cli/mirror/prune.go +++ b/pkg/cli/mirror/prune.go @@ -26,13 +26,18 @@ import ( // pruneRegistry plans and executes registry pruning based on current and previous Associations. func (o *MirrorOptions) pruneRegistry(ctx context.Context, prev, curr image.AssociationSet) error { - deleter, toRemove, err := o.planImagePruning(ctx, curr, prev) - if err != nil { - return err + //CFE-739 + if !o.SkipPruning { + deleter, toRemove, err := o.planImagePruning(ctx, curr, prev) + if err != nil { + return err + } + // We can use MaxPerRegistry for maxWorkers because + // we only prune from one registry + return o.pruneImages(deleter, toRemove, o.MaxPerRegistry) } - // We can use MaxPerRegistry for maxWorkers because - // we only prune from one registry - return o.pruneImages(deleter, toRemove, o.MaxPerRegistry) + klog.Info("skipped pruning") + return nil } // planImagePruning creates a ManifestDeleter and map of manifests scheduled for deletion.