in pkg/node/manager/manager.go [246:310]
func (m *manager) UpdateNode(nodeName string) error {
m.lock.Lock()
defer m.lock.Unlock()
k8sNode, err := m.wrapper.K8sAPI.GetNode(nodeName)
if err != nil {
return fmt.Errorf("failed to update node %s, doesn't exist in cache anymore", nodeName)
}
log := m.Log.WithValues("node name", nodeName, "request", "update")
cachedNode, found := m.dataStore[nodeName]
if !found {
m.Log.Info("the node doesn't exist in cache anymore, it might have been deleted")
return nil
}
var op AsyncOperation
status, err := m.GetNodeUpdateStatus(k8sNode, cachedNode)
if err != nil {
return err
}
switch status {
case UnManagedToManaged:
log.Info("node was previously un-managed, will be added as managed node now")
cachedNode = node.NewManagedNode(m.Log, k8sNode.Name,
GetNodeInstanceID(k8sNode), GetNodeOS(k8sNode), m.wrapper.K8sAPI, m.wrapper.EC2API)
// Update the Subnet if the node has custom networking configured
err = m.updateSubnetIfUsingENIConfig(cachedNode, k8sNode)
if err != nil {
return err
}
m.dataStore[nodeName] = cachedNode
op = Init
case ManagedToUnManaged:
log.Info("node was being managed earlier, will be added as un-managed node now")
// Change the node in cache, but for de initializing all resource providers
// pass the async job the older cached value instead
m.dataStore[nodeName] = node.NewUnManagedNode(m.Log, k8sNode.Name,
GetNodeInstanceID(k8sNode), GetNodeOS(k8sNode))
op = Delete
case StillManaged:
// We only need to update the Subnet for Managed Node. This subnet is required for creating
// Branch ENIs when user is using Custom Networking. In future, we should move this to
// UpdateResources for Trunk ENI Provider as this is resource specific
err = m.updateSubnetIfUsingENIConfig(cachedNode, k8sNode)
if err != nil {
return err
}
op = Update
case StillUnManaged:
log.V(1).Info("node not managed, no operation required")
// No async operation required for un-managed nodes
return nil
}
m.worker.SubmitJob(AsyncOperationJob{
op: op,
node: cachedNode,
nodeName: nodeName,
})
return nil
}