@@ -74,10 +74,11 @@ func ControllerManagedBy(m manager.Manager) *Builder {
74
74
75
75
// ForInput represents the information set by the For method.
76
76
type ForInput struct {
77
- object client.Object
78
- predicates []predicate.Predicate
79
- objectProjection objectProjection
80
- err error
77
+ object client.Object
78
+ forceDefaultCluster bool // in cluster-aware mode, force the object to be watched in the default cluster
79
+ predicates []predicate.Predicate
80
+ objectProjection objectProjection
81
+ err error
81
82
}
82
83
83
84
// For defines the type of Object being *reconciled*, and configures the ControllerManagedBy to respond to create / delete /
@@ -100,10 +101,11 @@ func (blder *Builder) For(object client.Object, opts ...ForOption) *Builder {
100
101
101
102
// OwnsInput represents the information set by Owns method.
102
103
type OwnsInput struct {
103
- matchEveryOwner bool
104
- object client.Object
105
- predicates []predicate.Predicate
106
- objectProjection objectProjection
104
+ matchEveryOwner bool
105
+ object client.Object
106
+ forceDefaultCluster bool // in cluster-aware mode, force the object to be watched in the default cluster
107
+ predicates []predicate.Predicate
108
+ objectProjection objectProjection
107
109
}
108
110
109
111
// Owns defines types of Objects being *generated* by the ControllerManagedBy, and configures the ControllerManagedBy to respond to
@@ -126,10 +128,11 @@ func (blder *Builder) Owns(object client.Object, opts ...OwnsOption) *Builder {
126
128
127
129
// WatchesInput represents the information set by Watches method.
128
130
type WatchesInput struct {
129
- src source.Source
130
- eventHandler handler.EventHandler
131
- predicates []predicate.Predicate
132
- objectProjection objectProjection
131
+ src source.Source
132
+ forceDefaultCluster bool // in cluster-aware mode, force the object to be watched in the default cluster
133
+ eventHandler handler.EventHandler
134
+ predicates []predicate.Predicate
135
+ objectProjection objectProjection
133
136
}
134
137
135
138
// Watches defines the type of Object to watch, and configures the ControllerManagedBy to respond to create / delete /
@@ -284,7 +287,10 @@ func (blder *Builder) doWatch() error {
284
287
if err != nil {
285
288
return err
286
289
}
287
- src := source .Kind (blder .cluster .GetCache (), obj )
290
+ src := clusterAwareSource {
291
+ Source : source .Kind (blder .cluster .GetCache (), obj ),
292
+ forceDefaultCluster : blder .forInput .forceDefaultCluster ,
293
+ }
288
294
hdler := & handler.EnqueueRequestForObject {}
289
295
allPredicates := append ([]predicate.Predicate (nil ), blder .globalPredicates ... )
290
296
allPredicates = append (allPredicates , blder .forInput .predicates ... )
@@ -302,7 +308,10 @@ func (blder *Builder) doWatch() error {
302
308
if err != nil {
303
309
return err
304
310
}
305
- src := source .Kind (blder .cluster .GetCache (), obj )
311
+ src := clusterAwareSource {
312
+ Source : source .Kind (blder .cluster .GetCache (), obj ),
313
+ forceDefaultCluster : own .forceDefaultCluster ,
314
+ }
306
315
opts := []handler.OwnerOption {}
307
316
if ! own .matchEveryOwner {
308
317
opts = append (opts , handler .OnlyControllerOwner ())
@@ -342,7 +351,10 @@ func (blder *Builder) doWatch() error {
342
351
}
343
352
allPredicates := append ([]predicate.Predicate (nil ), blder .globalPredicates ... )
344
353
allPredicates = append (allPredicates , w .predicates ... )
345
- if err := blder .ctrl .Watch (w .src , w .eventHandler , allPredicates ... ); err != nil {
354
+ if err := blder .ctrl .Watch (
355
+ clusterAwareSource {Source : w .src , forceDefaultCluster : w .forceDefaultCluster },
356
+ w .eventHandler , allPredicates ... ,
357
+ ); err != nil {
346
358
return err
347
359
}
348
360
}
@@ -431,3 +443,12 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
431
443
blder .ctrl , err = newController (controllerName , blder .mgr , ctrlOptions )
432
444
return err
433
445
}
446
+
447
+ type clusterAwareSource struct {
448
+ source.Source
449
+ forceDefaultCluster bool
450
+ }
451
+
452
+ func (s clusterAwareSource ) ForceDefaultCluster () bool {
453
+ return s .forceDefaultCluster
454
+ }
0 commit comments