in pkg/localcontroller/controller.go [46:79]
func NewController(
kubeclientset kubernetes.Interface,
nodesInformer cache.SharedIndexInformer) *Controller {
// Create a new controller
klog.V(1).Infof("Creating a local controller to manage node-level probers")
controller := &Controller{
kubeclientset: kubeclientset,
nodesSynced: nodesInformer.HasSynced,
workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "nodeworkers"),
watchedNodes: &watchedNodes{nodes: make(map[string]int)},
}
klog.V(1).Info("Setting up event handlers")
nodesInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: controller.handleObject,
// We only care about the node restart events
// so that we need to restart the prober on the node
UpdateFunc: func(old, new interface{}) {
newNode := new.(*corev1.Node)
oldNode := old.(*corev1.Node)
if newNode.ResourceVersion == oldNode.ResourceVersion {
// Periodic resync will send update events for all known node.
// Two different versions of the same Node will always have different RVs.
klog.V(1).Infof("This is fired when the informer does the resync. No change to the resource, do nothing!")
return
}
controller.handleObject(new)
},
DeleteFunc: controller.handleObject,
})
return controller
}