diff --git a/internal/controller/helmrelease_controller.go b/internal/controller/helmrelease_controller.go index fe7178355..e4dfef268 100644 --- a/internal/controller/helmrelease_controller.go +++ b/internal/controller/helmrelease_controller.go @@ -223,6 +223,9 @@ func (r *HelmReleaseReconciler) reconcileRelease(ctx context.Context, log := ctrl.LoggerFrom(ctx) + // Snapshot the object's readiness state to detect failure recovery. + wasNotReady := !conditions.IsReady(obj) + // Check deprecated fields. if obj.GetRollback().Recreate { log.Info("warning: the .spec.rollback.recreate field is deprecated and has no effect. " + @@ -441,6 +444,13 @@ func (r *HelmReleaseReconciler) reconcileRelease(ctx context.Context, } return ctrl.Result{}, err } + + // Emit recovery event if the release was not ready before and is now ready. + if wasNotReady && conditions.IsReady(obj) { + r.Eventf(obj, corev1.EventTypeNormal, meta.SucceededReason, + "Release reconciliation recovered from previous failure") + } + return jitter.JitteredRequeueInterval(ctrl.Result{RequeueAfter: obj.GetRequeueAfter()}), nil }