@@ -25,12 +25,10 @@ import (
2525 "k8s.io/apimachinery/pkg/runtime"
2626 "k8s.io/client-go/util/retry"
2727 ctrl "sigs.k8s.io/controller-runtime"
28+ "sigs.k8s.io/controller-runtime/pkg/builder"
2829 "sigs.k8s.io/controller-runtime/pkg/client"
2930 "sigs.k8s.io/controller-runtime/pkg/event"
30- "sigs.k8s.io/controller-runtime/pkg/handler"
3131 "sigs.k8s.io/controller-runtime/pkg/predicate"
32- "sigs.k8s.io/controller-runtime/pkg/source"
33-
3432 readinessv1alpha1 "sigs.k8s.io/node-readiness-controller/api/v1alpha1"
3533)
3634
@@ -243,46 +241,42 @@ func (r *ReadinessGateController) recordNodeFailure(
243241
244242// SetupWithManager sets up the controller with the Manager.
245243func (r * NodeReconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager ) error {
246- nodeController , err := ctrl .NewControllerManagedBy (mgr ).
247- For (& corev1.Node {}).
244+ return ctrl .NewControllerManagedBy (mgr ).
248245 Named ("node" ).
249- Build (r )
250- if err != nil {
251- return err
252- }
253- // Watch node create/update events for readiness taint processing
254- return nodeController .Watch (
255- source .Kind (mgr .GetCache (), & corev1.Node {},
256- & handler.TypedEnqueueRequestForObject [* corev1.Node ]{},
257- predicate.TypedFuncs [* corev1.Node ]{
258- CreateFunc : func (e event.TypedCreateEvent [* corev1.Node ]) bool {
259- log := ctrl .LoggerFrom (ctx )
260- log .V (4 ).Info ("NodeReconciler processing node create event" , "node" , e .Object .Name )
261- return true
262- },
263- UpdateFunc : func (e event.TypedUpdateEvent [* corev1.Node ]) bool {
264- log := ctrl .LoggerFrom (ctx )
265- oldNode := e .ObjectOld
266- newNode := e .ObjectNew
267-
268- // Only reconcile if conditions or taints changed
269- conditionsChanged := ! conditionsEqual (oldNode .Status .Conditions , newNode .Status .Conditions )
270- taintsChanged := ! taintsEqual (oldNode .Spec .Taints , newNode .Spec .Taints )
271- labelsChanged := ! labelsEqual (oldNode .Labels , newNode .Labels )
272-
273- shouldReconcile := conditionsChanged || taintsChanged || labelsChanged
274-
275- if shouldReconcile {
276- log .V (4 ).Info ("NodeReconciler processing node update event" ,
277- "node" , newNode .Name ,
278- "conditionsChanged" , conditionsChanged ,
279- "taintsChanged" , taintsChanged ,
280- "labelsChanged" , labelsChanged )
281- }
282-
283- return shouldReconcile
284- },
285- }))
246+ For (& corev1.Node {}, builder .WithPredicates (predicate.Funcs {
247+ CreateFunc : func (e event.CreateEvent ) bool {
248+ log := ctrl .LoggerFrom (ctx )
249+ n , ok := e .Object .(* corev1.Node )
250+ if ! ok {
251+ log .V (4 ).Info ("Expected Node" , "type" , fmt .Sprintf ("%T" , e .Object ))
252+ return false
253+ }
254+ log .V (4 ).Info ("NodeReconciler processing node create event" , "node" , n .GetName ())
255+ return true
256+ },
257+ UpdateFunc : func (e event.UpdateEvent ) bool {
258+ log := ctrl .LoggerFrom (ctx )
259+ oldNode := e .ObjectOld .(* corev1.Node )
260+ newNode := e .ObjectNew .(* corev1.Node )
261+
262+ conditionsChanged := ! conditionsEqual (oldNode .Status .Conditions , newNode .Status .Conditions )
263+ taintsChanged := ! taintsEqual (oldNode .Spec .Taints , newNode .Spec .Taints )
264+ labelsChanged := ! labelsEqual (oldNode .Labels , newNode .Labels )
265+
266+ shouldReconcile := conditionsChanged || taintsChanged || labelsChanged
267+
268+ if shouldReconcile {
269+ log .V (4 ).Info ("NodeReconciler processing node update event" ,
270+ "node" , newNode .Name ,
271+ "conditionsChanged" , conditionsChanged ,
272+ "taintsChanged" , taintsChanged ,
273+ "labelsChanged" , labelsChanged )
274+ }
275+
276+ return shouldReconcile
277+ },
278+ })).
279+ Complete (r )
286280}
287281
288282// conditionsEqual checks if two condition slices are equal
0 commit comments