diff --git a/pkg/controller/cloud/node_controller.go b/pkg/controller/cloud/node_controller.go index 74c09d53db3..bc6dd93a3d2 100644 --- a/pkg/controller/cloud/node_controller.go +++ b/pkg/controller/cloud/node_controller.go @@ -105,8 +105,11 @@ func NewCloudNodeController( nodeStatusUpdateFrequency: nodeStatusUpdateFrequency, } - nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: cnc.AddCloudNode, + // Use shared informer to listen to add/update of nodes. Note that any nodes + // that exist before node controller starts will show up in the update method + cnc.nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: cnc.AddCloudNode, + UpdateFunc: cnc.UpdateCloudNode, }) return cnc @@ -309,6 +312,14 @@ func (cnc *CloudNodeController) MonitorNode() { } } +func (cnc *CloudNodeController) UpdateCloudNode(_, newObj interface{}) { + if _, ok := newObj.(*v1.Node); !ok { + utilruntime.HandleError(fmt.Errorf("unexpected object type: %v", newObj)) + return + } + cnc.AddCloudNode(newObj) +} + // This processes nodes that were added into the cluster, and cloud initialize them if appropriate func (cnc *CloudNodeController) AddCloudNode(obj interface{}) { node := obj.(*v1.Node)