diff --git a/controllers/imagepolicy_controller.go b/controllers/imagepolicy_controller.go index b9f838c4..c774d510 100644 --- a/controllers/imagepolicy_controller.go +++ b/controllers/imagepolicy_controller.go @@ -51,11 +51,14 @@ const imageRepoKey = ".spec.imageRepository.name" // ImagePolicyReconciler reconciles a ImagePolicy object type ImagePolicyReconciler struct { client.Client - Scheme *runtime.Scheme - EventRecorder kuberecorder.EventRecorder - ExternalEventRecorder *events.Recorder - MetricsRecorder *metrics.Recorder - Database DatabaseReader + Scheme *runtime.Scheme + EventRecorder kuberecorder.EventRecorder + ExternalEventRecorder *events.Recorder + MetricsRecorder *metrics.Recorder + Database DatabaseReader +} + +type ImagePolicyReconcilerOptions struct { MaxConcurrentReconciles int } @@ -193,7 +196,7 @@ func (r *ImagePolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{}, err } -func (r *ImagePolicyReconciler) SetupWithManager(mgr ctrl.Manager) error { +func (r *ImagePolicyReconciler) SetupWithManager(mgr ctrl.Manager, opts ImagePolicyReconcilerOptions) error { // index the policies by which image repo they point at, so that // it's easy to list those out when an image repo changes. if err := mgr.GetFieldIndexer().IndexField(context.Background(), &imagev1.ImagePolicy{}, imageRepoKey, func(obj client.Object) []string { @@ -210,7 +213,7 @@ func (r *ImagePolicyReconciler) SetupWithManager(mgr ctrl.Manager) error { handler.EnqueueRequestsFromMapFunc(r.imagePoliciesForRepository), ). WithOptions(controller.Options{ - MaxConcurrentReconciles: r.MaxConcurrentReconciles, + MaxConcurrentReconciles: opts.MaxConcurrentReconciles, }). Complete(r) } diff --git a/controllers/imagerepository_controller.go b/controllers/imagerepository_controller.go index 703fe075..d3294595 100644 --- a/controllers/imagerepository_controller.go +++ b/controllers/imagerepository_controller.go @@ -66,17 +66,20 @@ const ( // ImageRepositoryReconciler reconciles a ImageRepository object type ImageRepositoryReconciler struct { client.Client - Scheme *runtime.Scheme - EventRecorder kuberecorder.EventRecorder - ExternalEventRecorder *events.Recorder - MetricsRecorder *metrics.Recorder - MaxConcurrentReconciles int - Database interface { + Scheme *runtime.Scheme + EventRecorder kuberecorder.EventRecorder + ExternalEventRecorder *events.Recorder + MetricsRecorder *metrics.Recorder + Database interface { DatabaseWriter DatabaseReader } } +type ImageRepositoryReconcilerOptions struct { + MaxConcurrentReconciles int +} + type dockerConfig struct { Auths map[string]authn.AuthConfig } @@ -354,12 +357,12 @@ func (r *ImageRepositoryReconciler) shouldScan(repo imagev1.ImageRepository, now return false, when, nil } -func (r *ImageRepositoryReconciler) SetupWithManager(mgr ctrl.Manager) error { +func (r *ImageRepositoryReconciler) SetupWithManager(mgr ctrl.Manager, opts ImageRepositoryReconcilerOptions) error { return ctrl.NewControllerManagedBy(mgr). For(&imagev1.ImageRepository{}). WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicates.ReconcileRequestedPredicate{})). WithOptions(controller.Options{ - MaxConcurrentReconciles: r.MaxConcurrentReconciles, + MaxConcurrentReconciles: opts.MaxConcurrentReconciles, }). Complete(r) } diff --git a/controllers/suite_test.go b/controllers/suite_test.go index c18fed9a..5f666f93 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -105,14 +105,14 @@ var _ = BeforeSuite(func(done Done) { Scheme: scheme.Scheme, Database: database.NewBadgerDatabase(badgerDB), } - Expect(imageRepoReconciler.SetupWithManager(k8sMgr)).To(Succeed()) + Expect(imageRepoReconciler.SetupWithManager(k8sMgr, ImageRepositoryReconcilerOptions{})).To(Succeed()) imagePolicyReconciler = &ImagePolicyReconciler{ Client: k8sMgr.GetClient(), Scheme: scheme.Scheme, Database: database.NewBadgerDatabase(badgerDB), } - Expect(imagePolicyReconciler.SetupWithManager(k8sMgr)).To(Succeed()) + Expect(imagePolicyReconciler.SetupWithManager(k8sMgr, ImagePolicyReconcilerOptions{})).To(Succeed()) // this must be started for the caches to be running, and thereby // for the client to be usable. diff --git a/main.go b/main.go index 7a4f0f78..22eb58b3 100644 --- a/main.go +++ b/main.go @@ -138,14 +138,15 @@ func main() { pprof.SetupHandlers(mgr, setupLog) if err = (&controllers.ImageRepositoryReconciler{ - Client: mgr.GetClient(), - Scheme: mgr.GetScheme(), - EventRecorder: mgr.GetEventRecorderFor(controllerName), - ExternalEventRecorder: eventRecorder, - MetricsRecorder: metricsRecorder, - Database: db, + Client: mgr.GetClient(), + Scheme: mgr.GetScheme(), + EventRecorder: mgr.GetEventRecorderFor(controllerName), + ExternalEventRecorder: eventRecorder, + MetricsRecorder: metricsRecorder, + Database: db, + }).SetupWithManager(mgr, controllers.ImageRepositoryReconcilerOptions{ MaxConcurrentReconciles: concurrent, - }).SetupWithManager(mgr); err != nil { + }); err != nil { setupLog.Error(err, "unable to create controller", "controller", imagev1.ImageRepositoryKind) os.Exit(1) } @@ -156,8 +157,9 @@ func main() { ExternalEventRecorder: eventRecorder, MetricsRecorder: metricsRecorder, Database: db, + }).SetupWithManager(mgr, controllers.ImagePolicyReconcilerOptions{ MaxConcurrentReconciles: concurrent, - }).SetupWithManager(mgr); err != nil { + }); err != nil { setupLog.Error(err, "unable to create controller", "controller", imagev1.ImagePolicyKind) os.Exit(1) }