diff --git a/pkg/controller/cyclenoderequest/transitioner/transitions.go b/pkg/controller/cyclenoderequest/transitioner/transitions.go index e0e1e45..51347ae 100644 --- a/pkg/controller/cyclenoderequest/transitioner/transitions.go +++ b/pkg/controller/cyclenoderequest/transitioner/transitions.go @@ -524,7 +524,7 @@ func (t *CycleNodeRequestTransitioner) transitionHealing() (reconcile.Result, er if err != nil { return t.transitionToFailed(err) } - + if !nodeExists { t.rm.LogEvent(t.cycleNodeRequest, "HealingNodes", "Node does not exist, skip healing node: %s", node.Name) @@ -533,15 +533,16 @@ func (t *CycleNodeRequestTransitioner) transitionHealing() (reconcile.Result, er // try and re-attach the nodes, if any were un-attached t.rm.LogEvent(t.cycleNodeRequest, "AttachingNodes", "Attaching instances to nodes group: %v", node.Name) + // if the node is already attached, ignore the error and continue to un-cordoning, otherwise return with error alreadyAttached, err := nodeGroups.AttachInstance(node.ProviderID, node.NodeGroupName) + if err != nil && !alreadyAttached { + return t.transitionToFailed(err) + } if alreadyAttached { t.rm.LogEvent(t.cycleNodeRequest, "AttachingNodes", "Skip re-attaching instances to nodes group: %v, err: %v", node.Name, err) } - if err != nil { - return t.transitionToFailed(err) - } // un-cordon after attach as well t.rm.LogEvent(t.cycleNodeRequest, "UncordoningNodes", "Uncordoning nodes in node group: %v", node.Name)