Skip to content

Commit 865b5a6

Browse files
authored
Merge pull request #1369 from Nordix/issue-1362
Fix state when configuration set back to current state following upgrade failure
2 parents 62f162d + 6cd43d0 commit 865b5a6

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

internal/reconcile/atomic_release.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,14 @@ func (r *AtomicRelease) actionForState(ctx context.Context, req *Request, state
377377
replaceCondition(req.Object, v2.RemediatedCondition, v2.ReleasedCondition, v2.UpgradeSucceededReason, msg, metav1.ConditionTrue)
378378
}
379379

380+
// Since the release is in-sync, replace any Status=False released condition for any previous upgrade failure with Status=True
381+
// This can happen when the desired configuration is changed back to match the current release following an upgrade failure
382+
if conditions.IsFalse(req.Object, v2.ReleasedCondition) && conditions.GetReason(req.Object, v2.ReleasedCondition) == v2.UpgradeFailedReason {
383+
cur := req.Object.Status.History.Latest()
384+
msg := fmt.Sprintf(fmtUpgradeSuccess, cur.FullReleaseName(), cur.VersionedChartName())
385+
conditions.MarkTrue(req.Object, v2.ReleasedCondition, v2.UpgradeSucceededReason, "%s", msg)
386+
}
387+
380388
return nil, nil
381389
case ReleaseStatusLocked:
382390
log.Info(msgWithReason("release locked", state.Reason))

internal/reconcile/atomic_release_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,6 +1532,26 @@ func TestAtomicRelease_actionForState(t *testing.T) {
15321532
*conditions.TrueCondition(v2.ReleasedCondition, v2.UpgradeSucceededReason, "upgrade succeeded"),
15331533
},
15341534
},
1535+
{
1536+
name: "in-sync release with stale ready condition",
1537+
status: func(releases []*helmrelease.Release) v2.HelmReleaseStatus {
1538+
return v2.HelmReleaseStatus{
1539+
History: v2.Snapshots{
1540+
{Version: 1},
1541+
},
1542+
Conditions: []metav1.Condition{
1543+
*conditions.FalseCondition(v2.ReleasedCondition, v2.UpgradeFailedReason, "upgrade failed"),
1544+
*conditions.FalseCondition(meta.ReadyCondition, v2.UpgradeFailedReason, "upgrade failed"),
1545+
},
1546+
}
1547+
},
1548+
state: ReleaseState{Status: ReleaseStatusInSync},
1549+
want: nil,
1550+
assertConditions: []metav1.Condition{
1551+
*conditions.TrueCondition(v2.ReleasedCondition, v2.UpgradeSucceededReason, "upgrade succeeded"),
1552+
*conditions.FalseCondition(meta.ReadyCondition, v2.UpgradeFailedReason, "upgrade failed"),
1553+
},
1554+
},
15351555
{
15361556
name: "locked release triggers unlock action",
15371557
state: ReleaseState{Status: ReleaseStatusLocked},

0 commit comments

Comments
 (0)