in internal/controller/node_reconciler.go [139:162]
func (r *NodeReconciler) SetupWithManager(mgr ctrl.Manager) error {
if err := mgr.GetFieldIndexer().IndexField(context.TODO(), &corev1.Pod{}, NodeNameIndex, func(rawObj client.Object) []string {
// Extract the spec.nodeName field
pod := rawObj.(*corev1.Pod)
if pod.Spec.NodeName == "" {
return nil // Don't index Pods without a NodeName
}
return []string{pod.Spec.NodeName}
}); err != nil {
return err
}
return ctrl.NewControllerManagedBy(mgr).
For(&corev1.Node{}).
WithEventFilter(predicate.Funcs{
// ignore status updates as we only care about cordon.
UpdateFunc: func(ue event.UpdateEvent) bool {
oldNode := ue.ObjectOld.(*v1.Node)
newNode := ue.ObjectNew.(*v1.Node)
return oldNode.Spec.Unschedulable == newNode.Spec.Unschedulable
},
}).
Complete(r)
}