From 5dc05a9721c21c8e5c92278774f29e0e46e90272 Mon Sep 17 00:00:00 2001 From: Tiger Kaovilai Date: Wed, 30 Oct 2024 12:13:48 -0500 Subject: [PATCH] Fix Use IfNotPresent policy when `operator-sdk run bundle --if-not-present` #6795 Signed-off-by: Tiger Kaovilai --- .../olm/operator/registry/fbcindex/fbc_registry_pod.go | 8 ++++++++ internal/olm/operator/registry/index/registry_pod.go | 8 ++++++++ internal/olm/operator/registry/index_image.go | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go b/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go index ec898394ef..4abc2f238a 100644 --- a/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go +++ b/internal/olm/operator/registry/fbcindex/fbc_registry_pod.go @@ -60,6 +60,9 @@ type FBCRegistryPod struct { //nolint:maligned // BundleItems contains all bundles to be added to a registry pod. BundleItems []index.BundleItem + // ImagePullPolicy is the image pull policy for the registry pod, default is PullAlways + ImagePullPolicy corev1.PullPolicy + // Index image contains a database of pointers to operator manifest content that is queriable via an API. // new version of an operator bundle when published can be added to an index image IndexImage string @@ -156,6 +159,11 @@ func (f *FBCRegistryPod) Create(ctx context.Context, cfg *operator.Configuration } } + if f.ImagePullPolicy == "" { + f.ImagePullPolicy = corev1.PullAlways + } + f.pod.Spec.Containers[0].ImagePullPolicy = f.ImagePullPolicy + if err := f.cfg.Client.Create(ctx, f.pod); err != nil { return nil, fmt.Errorf("error creating pod: %w", err) } diff --git a/internal/olm/operator/registry/index/registry_pod.go b/internal/olm/operator/registry/index/registry_pod.go index 337df0ea22..ccbf9bf316 100644 --- a/internal/olm/operator/registry/index/registry_pod.go +++ b/internal/olm/operator/registry/index/registry_pod.go @@ -58,6 +58,9 @@ type SQLiteRegistryPod struct { //nolint:maligned // BundleItems contains all bundles to be added to a registry pod. BundleItems []BundleItem + // ImagePullPolicy is the image pull policy for the registry pod, default is PullAlways + ImagePullPolicy corev1.PullPolicy + // Index image contains a database of pointers to operator manifest content that is queriable via an API. // new version of an operator bundle when published can be added to an index image IndexImage string @@ -151,6 +154,11 @@ func (rp *SQLiteRegistryPod) Create(ctx context.Context, cfg *operator.Configura } } + if rp.ImagePullPolicy == "" { + rp.ImagePullPolicy = corev1.PullAlways + } + rp.pod.Spec.Containers[0].ImagePullPolicy = rp.ImagePullPolicy + if err := rp.cfg.Client.Create(ctx, rp.pod); err != nil { return nil, fmt.Errorf("error creating pod: %w", err) } diff --git a/internal/olm/operator/registry/index_image.go b/internal/olm/operator/registry/index_image.go index f7ea0f1110..b16aa09bb6 100644 --- a/internal/olm/operator/registry/index_image.go +++ b/internal/olm/operator/registry/index_image.go @@ -97,6 +97,7 @@ type IndexImageCatalogCreator struct { HasFBCLabel bool FBCContent string PackageName string + ImagePullPolicy string IndexImage string InitImage string BundleImage string @@ -138,6 +139,7 @@ func (c *IndexImageCatalogCreator) BindFlags(fs *pflag.FlagSet) { "while pulling bundles") fs.BoolVar(&c.UseHTTP, "use-http", false, "use plain HTTP for container image registries "+ "while pulling bundles") + fs.StringVar(&c.ImagePullPolicy, "image-pull-policy", string(corev1.PullAlways), "image pull policy for the registry pod") // default to Legacy c.SecurityContext = SecurityContext{ContextType: Legacy} @@ -531,6 +533,7 @@ func (c IndexImageCatalogCreator) createAnnotatedRegistry(ctx context.Context, c InitImage: c.InitImage, FBCContent: c.FBCContent, SecurityContext: c.SecurityContext.String(), + ImagePullPolicy: corev1.PullPolicy(c.ImagePullPolicy), } pod, err = fbcRegistryPod.Create(ctx, c.cfg, cs) @@ -548,6 +551,7 @@ func (c IndexImageCatalogCreator) createAnnotatedRegistry(ctx context.Context, c SkipTLSVerify: c.SkipTLSVerify, UseHTTP: c.UseHTTP, SecurityContext: c.SecurityContext.String(), + ImagePullPolicy: corev1.PullPolicy(c.ImagePullPolicy), } if registryPod.DBPath, err = c.getDBPath(ctx); err != nil {