Skip to content

Commit a332735

Browse files
committed
Properly use checksum and ordered checksum
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
1 parent 958052a commit a332735

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

api/v2beta1/helmrelease_types.go

+27
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,8 @@ func HelmReleaseReady(hr HelmRelease) HelmRelease {
945945

946946
// HelmReleaseAttempted registers an attempt of the given HelmRelease with the given state.
947947
// and returns the modified HelmRelease and a boolean indicating a state change.
948+
//
949+
// Deprecated: in favor of HelmReleaseChanged and HelmReleaseRecordAttempt.
948950
func HelmReleaseAttempted(hr HelmRelease, revision string, releaseRevision int, valuesChecksum string) (HelmRelease, bool) {
949951
changed := hr.Status.LastAttemptedRevision != revision ||
950952
hr.Status.LastReleaseRevision != releaseRevision ||
@@ -956,6 +958,31 @@ func HelmReleaseAttempted(hr HelmRelease, revision string, releaseRevision int,
956958
return hr, changed
957959
}
958960

961+
// HelmReleaseChanged returns if the HelmRelease has changed compared to the
962+
// provided values.
963+
func HelmReleaseChanged(hr HelmRelease, revision string, releaseRevision int, valuesChecksums ...string) bool {
964+
return hr.Status.LastAttemptedRevision != revision ||
965+
hr.Status.LastReleaseRevision != releaseRevision ||
966+
!inStringSlice(hr.Status.LastAttemptedValuesChecksum, valuesChecksums)
967+
}
968+
969+
// HelmReleaseRecordAttempt returns an attempt of the given HelmRelease with the
970+
// given state in the Status of the provided object.
971+
func HelmReleaseRecordAttempt(hr *HelmRelease, revision string, releaseRevision int, valuesChecksum string) {
972+
hr.Status.LastAttemptedRevision = revision
973+
hr.Status.LastReleaseRevision = releaseRevision
974+
hr.Status.LastAttemptedValuesChecksum = valuesChecksum
975+
}
976+
977+
func inStringSlice(str string, s []string) bool {
978+
for _, v := range s {
979+
if str == v {
980+
return true
981+
}
982+
}
983+
return false
984+
}
985+
959986
func resetFailureCounts(hr *HelmRelease) {
960987
hr.Status.Failures = 0
961988
hr.Status.InstallFailures = 0

internal/controllers/helmrelease_controller.go

+6-8
Original file line numberDiff line numberDiff line change
@@ -322,17 +322,15 @@ func (r *HelmReleaseReconciler) reconcileRelease(ctx context.Context,
322322
return v2.HelmReleaseNotReady(hr, v2.GetLastReleaseFailedReason, "failed to get last release revision"), err
323323
}
324324

325-
// Register the current release attempt.
325+
// Detect divergence between release in storage and HelmRelease spec.
326326
revision := chart.Metadata.Version
327327
releaseRevision := util.ReleaseRevision(rel)
328-
valuesChecksum := util.ValuesChecksum(values)
329-
hr, hasNewState := v2.HelmReleaseAttempted(hr, revision, releaseRevision, valuesChecksum)
328+
// TODO: deprecate "unordered" checksum.
329+
valuesChecksum := util.OrderedValuesChecksum(values)
330+
hasNewState := v2.HelmReleaseChanged(hr, revision, releaseRevision, util.ValuesChecksum(values), valuesChecksum)
330331

331-
if hasNewState {
332-
// If there is a change, check on ordered checksum.
333-
valuesChecksum = util.OrderedValuesChecksum(values)
334-
hr, hasNewState = v2.HelmReleaseAttempted(hr, revision, releaseRevision, valuesChecksum)
335-
}
332+
// Register the current release attempt.
333+
v2.HelmReleaseRecordAttempt(&hr, revision, releaseRevision, valuesChecksum)
336334

337335
// Run diff against current cluster state.
338336
if !hasNewState && rel != nil {

0 commit comments

Comments
 (0)