@@ -445,12 +445,15 @@ func (r *Reconciler) patchUnhealthyTargets(ctx context.Context, logger logr.Logg
445
445
if err != nil {
446
446
conditions .MarkFalse (m , clusterv1 .ExternalRemediationTemplateAvailableCondition , clusterv1 .ExternalRemediationTemplateNotFoundReason , clusterv1 .ConditionSeverityError , err .Error ())
447
447
448
- v1beta2conditions .Set (t .Machine , metav1.Condition {
449
- Type : clusterv1 .MachineExternallyRemediatedV1Beta2Condition ,
450
- Status : metav1 .ConditionFalse ,
451
- Reason : clusterv1 .MachineExternallyRemediatedRemediationTemplateNotFoundV1Beta2Reason ,
452
- Message : fmt .Sprintf ("Error retrieving remediation template %s %s" , m .Spec .RemediationTemplate .Kind , klog .KRef (m .Spec .RemediationTemplate .Namespace , m .Spec .RemediationTemplate .Name )),
453
- })
448
+ // Only set condition if not already deleting.
449
+ if t .Machine .DeletionTimestamp .IsZero () {
450
+ v1beta2conditions .Set (t .Machine , metav1.Condition {
451
+ Type : clusterv1 .MachineExternallyRemediatedV1Beta2Condition ,
452
+ Status : metav1 .ConditionFalse ,
453
+ Reason : clusterv1 .MachineExternallyRemediatedRemediationTemplateNotFoundV1Beta2Reason ,
454
+ Message : fmt .Sprintf ("Error retrieving remediation template %s %s" , m .Spec .RemediationTemplate .Kind , klog .KRef (m .Spec .RemediationTemplate .Namespace , m .Spec .RemediationTemplate .Name )),
455
+ })
456
+ }
454
457
errList = append (errList , errors .Wrapf (err , "error retrieving remediation template %v %q for machine %q in namespace %q within cluster %q" , m .Spec .RemediationTemplate .GroupVersionKind (), m .Spec .RemediationTemplate .Name , t .Machine .Name , t .Machine .Namespace , m .Spec .ClusterName ))
455
458
return errList
456
459
}
@@ -481,21 +484,27 @@ func (r *Reconciler) patchUnhealthyTargets(ctx context.Context, logger logr.Logg
481
484
if err := r .Client .Create (ctx , to ); err != nil {
482
485
conditions .MarkFalse (m , clusterv1 .ExternalRemediationRequestAvailableCondition , clusterv1 .ExternalRemediationRequestCreationFailedReason , clusterv1 .ConditionSeverityError , err .Error ())
483
486
484
- v1beta2conditions .Set (t .Machine , metav1.Condition {
485
- Type : clusterv1 .MachineExternallyRemediatedV1Beta2Condition ,
486
- Status : metav1 .ConditionFalse ,
487
- Reason : clusterv1 .MachineExternallyRemediatedRemediationRequestCreationFailedV1Beta2Reason ,
488
- Message : "Please check controller logs for errors" ,
489
- })
487
+ // Only set condition if not already deleting.
488
+ if t .Machine .DeletionTimestamp .IsZero () {
489
+ v1beta2conditions .Set (t .Machine , metav1.Condition {
490
+ Type : clusterv1 .MachineExternallyRemediatedV1Beta2Condition ,
491
+ Status : metav1 .ConditionFalse ,
492
+ Reason : clusterv1 .MachineExternallyRemediatedRemediationRequestCreationFailedV1Beta2Reason ,
493
+ Message : "Please check controller logs for errors" ,
494
+ })
495
+ }
490
496
errList = append (errList , errors .Wrapf (err , "error creating remediation request for machine %q in namespace %q within cluster %q" , t .Machine .Name , t .Machine .Namespace , t .Machine .Spec .ClusterName ))
491
497
return errList
492
498
}
493
499
494
- v1beta2conditions .Set (t .Machine , metav1.Condition {
495
- Type : clusterv1 .MachineExternallyRemediatedV1Beta2Condition ,
496
- Status : metav1 .ConditionFalse ,
497
- Reason : clusterv1 .MachineExternallyRemediatedWaitingForRemediationV1Beta2Reason ,
498
- })
500
+ // Only set condition if not already deleting.
501
+ if t .Machine .DeletionTimestamp .IsZero () {
502
+ v1beta2conditions .Set (t .Machine , metav1.Condition {
503
+ Type : clusterv1 .MachineExternallyRemediatedV1Beta2Condition ,
504
+ Status : metav1 .ConditionFalse ,
505
+ Reason : clusterv1 .MachineExternallyRemediatedWaitingForRemediationV1Beta2Reason ,
506
+ })
507
+ }
499
508
} else {
500
509
logger .Info ("Target has failed health check, marking for remediation" , "target" , t .string (), "reason" , condition .Reason , "message" , condition .Message )
501
510
// NOTE: MHC is responsible for creating MachineOwnerRemediatedCondition if missing or to trigger another remediation if the previous one is completed;
@@ -504,7 +513,8 @@ func (r *Reconciler) patchUnhealthyTargets(ctx context.Context, logger logr.Logg
504
513
conditions .MarkFalse (t .Machine , clusterv1 .MachineOwnerRemediatedCondition , clusterv1 .WaitingForRemediationReason , clusterv1 .ConditionSeverityWarning , "" )
505
514
}
506
515
507
- if ownerRemediatedCondition := v1beta2conditions .Get (t .Machine , clusterv1 .MachineOwnerRemediatedV1Beta2Condition ); ownerRemediatedCondition == nil || ownerRemediatedCondition .Status == metav1 .ConditionTrue {
516
+ // If the machine is already in deletion, the OwnerRemediated condition should not be set.
517
+ if ownerRemediatedCondition := v1beta2conditions .Get (t .Machine , clusterv1 .MachineOwnerRemediatedV1Beta2Condition ); t .Machine .DeletionTimestamp .IsZero () && (ownerRemediatedCondition == nil || ownerRemediatedCondition .Status == metav1 .ConditionTrue ) {
508
518
v1beta2conditions .Set (t .Machine , metav1.Condition {
509
519
Type : clusterv1 .MachineOwnerRemediatedV1Beta2Condition ,
510
520
Status : metav1 .ConditionFalse ,
0 commit comments