diff --git a/pkg/builder/controller.go b/pkg/builder/controller.go index 4ec4f7c9ac..1a115f2f7b 100644 --- a/pkg/builder/controller.go +++ b/pkg/builder/controller.go @@ -343,6 +343,9 @@ func (blder *Builder) doController(r reconcile.Reconciler) error { globalOpts := blder.mgr.GetControllerOptions() ctrlOptions := blder.ctrlOptions + if ctrlOptions.Reconciler != nil && r != nil { + return errors.New("reconciler was set via WithOptions() and via Build() or Complete()") + } if ctrlOptions.Reconciler == nil { ctrlOptions.Reconciler = r } diff --git a/pkg/builder/controller_test.go b/pkg/builder/controller_test.go index dd98c2e565..ff734abd83 100644 --- a/pkg/builder/controller_test.go +++ b/pkg/builder/controller_test.go @@ -298,7 +298,7 @@ var _ = Describe("application", func() { Expect(instance).NotTo(BeNil()) }) - It("should prefer reconciler from options during creation of controller", func() { + It("should not allow multiple reconcilers during creation of controller", func() { newController = func(name string, mgr manager.Manager, options controller.Options) (controller.Controller, error) { if options.Reconciler != (typedNoop{}) { return nil, fmt.Errorf("Custom reconciler expected %T but found %T", typedNoop{}, options.Reconciler) @@ -315,8 +315,8 @@ var _ = Describe("application", func() { Owns(&appsv1.ReplicaSet{}). WithOptions(controller.Options{Reconciler: typedNoop{}}). Build(noop) - Expect(err).NotTo(HaveOccurred()) - Expect(instance).NotTo(BeNil()) + Expect(err).To(HaveOccurred()) + Expect(instance).To(BeNil()) }) It("should allow multiple controllers for the same kind", func() {