@@ -23,6 +23,7 @@ import (
23
23
"strings"
24
24
"time"
25
25
26
+ "github.com/go-logr/logr"
26
27
"github.com/pkg/errors"
27
28
corev1 "k8s.io/api/core/v1"
28
29
storagev1 "k8s.io/api/storage/v1"
@@ -42,6 +43,7 @@ import (
42
43
"sigs.k8s.io/controller-runtime/pkg/controller"
43
44
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
44
45
"sigs.k8s.io/controller-runtime/pkg/handler"
46
+ "sigs.k8s.io/controller-runtime/pkg/predicate"
45
47
"sigs.k8s.io/controller-runtime/pkg/reconcile"
46
48
47
49
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
@@ -111,6 +113,8 @@ type Reconciler struct {
111
113
// specific time for a specific Request. This is used to implement rate-limiting to avoid
112
114
// e.g. spamming workload clusters with eviction requests during Node drain.
113
115
reconcileDeleteCache cache.Cache [cache.ReconcileEntry ]
116
+
117
+ predicateLog * logr.Logger
114
118
}
115
119
116
120
func (r * Reconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager , options controller.Options ) error {
@@ -122,7 +126,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
122
126
return errors .New ("Client, APIReader and ClusterCache must not be nil and RemoteConditionsGracePeriod must not be < 2m" )
123
127
}
124
128
125
- predicateLog := ctrl .LoggerFrom (ctx ).WithValues ("controller" , "machine" )
129
+ r . predicateLog = ptr . To ( ctrl .LoggerFrom (ctx ).WithValues ("controller" , "machine" ) )
126
130
clusterToMachines , err := util .ClusterToTypedObjectsMapper (mgr .GetClient (), & clusterv1.MachineList {}, mgr .GetScheme ())
127
131
if err != nil {
128
132
return err
@@ -139,29 +143,31 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
139
143
if r .nodeDeletionRetryTimeout .Nanoseconds () == 0 {
140
144
r .nodeDeletionRetryTimeout = 10 * time .Second
141
145
}
142
-
143
146
c , err := ctrl .NewControllerManagedBy (mgr ).
144
147
For (& clusterv1.Machine {}).
145
148
WithOptions (options ).
146
- WithEventFilter (predicates .ResourceHasFilterLabel (mgr .GetScheme (), predicateLog , r .WatchFilterValue )).
149
+ WithEventFilter (predicates .ResourceHasFilterLabel (mgr .GetScheme (), * r . predicateLog , r .WatchFilterValue )).
147
150
Watches (
148
151
& clusterv1.Cluster {},
149
152
handler .EnqueueRequestsFromMapFunc (clusterToMachines ),
150
153
builder .WithPredicates (
151
154
// TODO: should this wait for Cluster.Status.InfrastructureReady similar to Infra Machine resources?
152
- predicates .All (mgr .GetScheme (), predicateLog ,
153
- predicates .ClusterControlPlaneInitialized (mgr .GetScheme (), predicateLog ),
154
- predicates .ResourceHasFilterLabel (mgr .GetScheme (), predicateLog , r .WatchFilterValue ),
155
+ predicates .All (mgr .GetScheme (), * r .predicateLog ,
156
+ predicates .ResourceIsChanged (mgr .GetScheme (), * r .predicateLog ),
157
+ predicates .ClusterControlPlaneInitialized (mgr .GetScheme (), * r .predicateLog ),
158
+ predicates .ResourceHasFilterLabel (mgr .GetScheme (), * r .predicateLog , r .WatchFilterValue ),
155
159
),
156
160
)).
157
161
WatchesRawSource (r .ClusterCache .GetClusterSource ("machine" , clusterToMachines , clustercache .WatchForProbeFailure (r .RemoteConditionsGracePeriod ))).
158
162
Watches (
159
163
& clusterv1.MachineSet {},
160
164
handler .EnqueueRequestsFromMapFunc (msToMachines ),
165
+ builder .WithPredicates (predicates .ResourceIsChanged (mgr .GetScheme (), * r .predicateLog )),
161
166
).
162
167
Watches (
163
168
& clusterv1.MachineDeployment {},
164
169
handler .EnqueueRequestsFromMapFunc (mdToMachines ),
170
+ builder .WithPredicates (predicates .ResourceIsChanged (mgr .GetScheme (), * r .predicateLog )),
165
171
).
166
172
Build (r )
167
173
if err != nil {
@@ -174,7 +180,7 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, opt
174
180
Controller : c ,
175
181
Cache : mgr .GetCache (),
176
182
Scheme : mgr .GetScheme (),
177
- PredicateLogger : & predicateLog ,
183
+ PredicateLogger : r . predicateLog ,
178
184
}
179
185
r .ssaCache = ssa .NewCache ()
180
186
r .reconcileDeleteCache = cache .New [cache.ReconcileEntry ]()
@@ -1081,6 +1087,7 @@ func (r *Reconciler) watchClusterNodes(ctx context.Context, cluster *clusterv1.C
1081
1087
Watcher : r .controller ,
1082
1088
Kind : & corev1.Node {},
1083
1089
EventHandler : handler .EnqueueRequestsFromMapFunc (r .nodeToMachine ),
1090
+ Predicates : []predicate.TypedPredicate [client.Object ]{predicates .TypedResourceIsChanged [client.Object ](r .Client .Scheme (), * r .predicateLog )},
1084
1091
}))
1085
1092
}
1086
1093
0 commit comments