diff --git a/internal/controllers/machinedeployment/machinedeployment_rolling.go b/internal/controllers/machinedeployment/machinedeployment_rolling.go index 31bd697d8b24..f60b4b3ac55c 100644 --- a/internal/controllers/machinedeployment/machinedeployment_rolling.go +++ b/internal/controllers/machinedeployment/machinedeployment_rolling.go @@ -18,6 +18,7 @@ package machinedeployment import ( "context" + "sigs.k8s.io/cluster-api/util/patch" "sort" "github.com/pkg/errors" @@ -85,6 +86,8 @@ func (r *Reconciler) reconcileNewMachineSet(ctx context.Context, allMSs []*clust return nil } + newMS, err := r.cleanupDisableMachineCreateAnnotation(ctx, newMS) + if *(newMS.Spec.Replicas) > *(deployment.Spec.Replicas) { // Scale down. return r.scaleMachineSet(ctx, newMS, *(deployment.Spec.Replicas), deployment) @@ -293,3 +296,25 @@ func (r *Reconciler) scaleDownOldMachineSetsForRollingUpdate(ctx context.Context return totalScaledDown, nil } + +// cleanupDisableMachineCreateAnnotation will remove the disable machine create annotation from new MachineSets that were created during reconcileOldMachineSetsOnDelete. +func (r *Reconciler) cleanupDisableMachineCreateAnnotation(ctx context.Context, newMS *clusterv1.MachineSet) (*clusterv1.MachineSet, error) { + log := ctrl.LoggerFrom(ctx) + + if newMS.Annotations != nil { + if _, ok := newMS.Annotations[clusterv1.DisableMachineCreateAnnotation]; ok { + log.V(4).Info("removing annotation on latest MachineSet to enable machine creation") + patchHelper, err := patch.NewHelper(newMS, r.Client) + if err != nil { + return nil, err + } + delete(newMS.Annotations, clusterv1.DisableMachineCreateAnnotation) + err = patchHelper.Patch(ctx, newMS) + if err != nil { + return nil, err + } + } + } + + return newMS, nil +}