Skip to content

Commit 84c5c9f

Browse files
🐛 controllers without For() fail to start (#2108)
* 🐛 controllers without For() fail to start * Add a test for Builder without For Co-authored-by: Tsuzu <8574909+tsuzu@users.noreply.github.com>
1 parent ddcb99d commit 84c5c9f

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

pkg/builder/controller.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -216,15 +216,17 @@ func (blder *Builder) project(obj client.Object, proj objectProjection) (client.
216216

217217
func (blder *Builder) doWatch() error {
218218
// Reconcile type
219-
typeForSrc, err := blder.project(blder.forInput.object, blder.forInput.objectProjection)
220-
if err != nil {
221-
return err
222-
}
223-
src := &source.Kind{Type: typeForSrc}
224-
hdler := &handler.EnqueueRequestForObject{}
225-
allPredicates := append(blder.globalPredicates, blder.forInput.predicates...)
226-
if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil {
227-
return err
219+
if blder.forInput.object != nil {
220+
typeForSrc, err := blder.project(blder.forInput.object, blder.forInput.objectProjection)
221+
if err != nil {
222+
return err
223+
}
224+
src := &source.Kind{Type: typeForSrc}
225+
hdler := &handler.EnqueueRequestForObject{}
226+
allPredicates := append(blder.globalPredicates, blder.forInput.predicates...)
227+
if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil {
228+
return err
229+
}
228230
}
229231

230232
// Watches the managed types

pkg/builder/controller_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,23 @@ var _ = Describe("application", func() {
376376
defer cancel()
377377
doReconcileTest(ctx, "4", m, true, bldr)
378378
})
379+
380+
It("should Reconcile without For", func() {
381+
m, err := manager.New(cfg, manager.Options{})
382+
Expect(err).NotTo(HaveOccurred())
383+
384+
bldr := ControllerManagedBy(m).
385+
Named("Deployment").
386+
Watches( // Equivalent of For
387+
&source.Kind{Type: &appsv1.Deployment{}}, &handler.EnqueueRequestForObject{}).
388+
Watches( // Equivalent of Owns
389+
&source.Kind{Type: &appsv1.ReplicaSet{}},
390+
&handler.EnqueueRequestForOwner{OwnerType: &appsv1.Deployment{}, IsController: true})
391+
392+
ctx, cancel := context.WithCancel(context.Background())
393+
defer cancel()
394+
doReconcileTest(ctx, "9", m, true, bldr)
395+
})
379396
})
380397

381398
Describe("Set custom predicates", func() {

0 commit comments

Comments
 (0)