@@ -60,13 +60,22 @@ type Options struct {
60
60
// will never be created.
61
61
WatchFilterValue string
62
62
63
+ // ClusterFilter is a function that can be used to filter which clusters should be handled
64
+ // by the ClusterCache. If nil, all clusters will be handled. If set, only clusters for which
65
+ // the filter returns true will be handled.
66
+ ClusterFilter ClusterFilter
67
+
63
68
// Cache are the cache options for the caches that are created per cluster.
64
69
Cache CacheOptions
65
70
66
71
// Client are the client options for the clients that are created per cluster.
67
72
Client ClientOptions
68
73
}
69
74
75
+ // ClusterFilter is a function that filters which clusters should be handled by the ClusterCache.
76
+ // It returns true if the cluster should be handled, false otherwise.
77
+ type ClusterFilter func (cluster * clusterv1.Cluster ) bool
78
+
70
79
// CacheOptions are the cache options for the caches that are created per cluster.
71
80
type CacheOptions struct {
72
81
// SyncPeriod is the sync period of the cache.
@@ -451,6 +460,15 @@ func (cc *clusterCache) Reconcile(ctx context.Context, req reconcile.Request) (r
451
460
return ctrl.Result {RequeueAfter : defaultRequeueAfter }, nil
452
461
}
453
462
463
+ // Apply cluster filter if set
464
+ if cc .clusterAccessorConfig .ClusterFilter != nil && ! cc .clusterAccessorConfig .ClusterFilter (cluster ) {
465
+ log .V (6 ).Info ("Cluster filtered out by ClusterFilter, not connecting" )
466
+ accessor .Disconnect (ctx )
467
+ cc .deleteClusterAccessor (clusterKey )
468
+ cc .cleanupClusterSourcesForCluster (clusterKey )
469
+ return ctrl.Result {}, nil
470
+ }
471
+
454
472
// Return if infrastructure is not ready yet to avoid trying to open a connection when it cannot succeed.
455
473
// Requeue is not needed as there will be a new reconcile.Request when Cluster.status.initialization.infrastructureProvisioned is set.
456
474
if ! ptr .Deref (cluster .Status .Initialization .InfrastructureProvisioned , false ) {
@@ -735,5 +753,6 @@ func buildClusterAccessorConfig(scheme *runtime.Scheme, options Options, control
735
753
Interval : 10 * time .Second ,
736
754
FailureThreshold : 5 ,
737
755
},
756
+ ClusterFilter : options .ClusterFilter ,
738
757
}
739
758
}
0 commit comments