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..98963e2790 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,13 @@ 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") + _ = fs.MarkHidden("image-pull-policy") + pullIfNotPresent := false + fs.BoolVar(&pullIfNotPresent, "pull-if-not-present", false, "pull the image only if it is not present locally") + if pullIfNotPresent { + c.ImagePullPolicy = string(corev1.PullIfNotPresent) + } // default to Legacy c.SecurityContext = SecurityContext{ContextType: Legacy} @@ -531,6 +539,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 +557,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 {