Skip to content

Commit 6fe56d4

Browse files
committed
add --wait-for-node-deletion flag
causes the machine controller to re-queue a machine if node deletion fails. Without the flag reconciliation just continues and the error is ignored.
1 parent b1ec806 commit 6fe56d4

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

controllers/machine_controller.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ type MachineReconciler struct {
8282
// WatchFilterValue is the label value used to filter events prior to reconciliation.
8383
WatchFilterValue string
8484

85+
WaitForNodeDeletion bool
86+
8587
controller controller.Controller
8688
recorder record.EventRecorder
8789
externalTracker external.ObjectTracker
@@ -386,9 +388,13 @@ func (r *MachineReconciler) reconcileDelete(ctx context.Context, cluster *cluste
386388
return true, nil
387389
})
388390
if waitErr != nil {
389-
log.Error(deleteNodeErr, "Timed out deleting node, moving on", "node", m.Status.NodeRef.Name)
391+
log.Error(deleteNodeErr, "Timed out deleting node", "node", m.Status.NodeRef.Name)
390392
conditions.MarkFalse(m, clusterv1.MachineNodeHealthyCondition, clusterv1.DeletionFailedReason, clusterv1.ConditionSeverityWarning, "")
391393
r.recorder.Eventf(m, corev1.EventTypeWarning, "FailedDeleteNode", "error deleting Machine's node: %v", deleteNodeErr)
394+
if r.WaitForNodeDeletion {
395+
return ctrl.Result{}, deleteNodeErr
396+
}
397+
log.Info("Waiting for node deletion is disabled, moving on", "node", m.Status.NodeRef.Name)
392398
}
393399
}
394400

main.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ var (
8080
machinePoolConcurrency int
8181
clusterResourceSetConcurrency int
8282
machineHealthCheckConcurrency int
83+
waitForNodeDeletion bool
8384
syncPeriod time.Duration
8485
webhookPort int
8586
webhookCertDir string
@@ -160,6 +161,9 @@ func InitFlags(fs *pflag.FlagSet) {
160161
fs.IntVar(&machineHealthCheckConcurrency, "machinehealthcheck-concurrency", 10,
161162
"Number of machine health checks to process simultaneously")
162163

164+
fs.BoolVar(&waitForNodeDeletion, "wait-for-node-deletion", false,
165+
"If set, the Machine controller will postpone deletion of a Machine until the corresponding node is deleted in the Cluster's API.")
166+
163167
fs.DurationVar(&syncPeriod, "sync-period", 10*time.Minute,
164168
"The minimum interval at which watched resources are reconciled (e.g. 15m)")
165169

@@ -341,10 +345,11 @@ func setupReconcilers(ctx context.Context, mgr ctrl.Manager) {
341345
os.Exit(1)
342346
}
343347
if err := (&controllers.MachineReconciler{
344-
Client: mgr.GetClient(),
345-
APIReader: mgr.GetAPIReader(),
346-
Tracker: tracker,
347-
WatchFilterValue: watchFilterValue,
348+
Client: mgr.GetClient(),
349+
APIReader: mgr.GetAPIReader(),
350+
Tracker: tracker,
351+
WatchFilterValue: watchFilterValue,
352+
WaitForNodeDeletion: waitForNodeDeletion,
348353
}).SetupWithManager(ctx, mgr, concurrency(machineConcurrency)); err != nil {
349354
setupLog.Error(err, "unable to create controller", "controller", "Machine")
350355
os.Exit(1)

0 commit comments

Comments
 (0)