Skip to content

Commit ca0e907

Browse files
committed
fix:issue-5041
Signed-off-by: cndoit18 <[email protected]>
1 parent 2781cf8 commit ca0e907

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
entries:
2+
- description: >
3+
For Helm-based operators, fixed a bug where getting a new helm release revision for every reconciliation, even when there are no changes at all.
4+
kind: bugfix

internal/helm/release/manager.go

+19-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"encoding/json"
2121
"errors"
2222
"fmt"
23+
"reflect"
2324
"strings"
2425

2526
jsonpatch "gomodules.xyz/jsonpatch/v3"
@@ -135,6 +136,21 @@ func notFoundErr(err error) bool {
135136
return err != nil && strings.Contains(err.Error(), "not found")
136137
}
137138

139+
func equal(a, b interface{}) bool {
140+
if reflect.ValueOf(a).IsNil() || reflect.ValueOf(b).IsNil() {
141+
return apiequality.Semantic.DeepEqual(a, b)
142+
}
143+
144+
var aBuf, bBuf = &bytes.Buffer{}, &bytes.Buffer{}
145+
var ai, bi interface{}
146+
_ = json.NewEncoder(aBuf).Encode(a)
147+
_ = json.NewEncoder(bBuf).Encode(b)
148+
149+
_ = json.NewDecoder(aBuf).Decode(&ai)
150+
_ = json.NewDecoder(bBuf).Decode(&bi)
151+
return apiequality.Semantic.DeepEqual(ai, bi)
152+
}
153+
138154
func (m manager) isUpgrade(deployedRelease *rpb.Release) bool {
139155
if deployedRelease == nil {
140156
return false
@@ -143,8 +159,9 @@ func (m manager) isUpgrade(deployedRelease *rpb.Release) bool {
143159
// Judging whether to skip updates
144160
skip := m.namespace == deployedRelease.Namespace
145161
skip = skip && m.releaseName == deployedRelease.Name
146-
skip = skip && apiequality.Semantic.DeepEqual(m.chart, deployedRelease.Chart)
147-
skip = skip && apiequality.Semantic.DeepEqual(m.values, deployedRelease.Config)
162+
163+
skip = skip && equal(m.chart, deployedRelease.Chart)
164+
skip = skip && equal(m.values, deployedRelease.Config)
148165

149166
return !skip
150167
}

internal/helm/release/manager_test.go

+18-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package release
1616

1717
import (
18+
"bytes"
19+
"encoding/json"
1820
"testing"
1921

2022
"github.com/stretchr/testify/assert"
@@ -247,11 +249,20 @@ func TestManagerisUpgrade(t *testing.T) {
247249
name: "different values",
248250
releaseName: "deployed",
249251
releaseNs: "deployed-ns",
250-
values: map[string]interface{}{"key": "1"},
252+
values: map[string]interface{}{"key": "1", "int": int32(1)},
251253
chart: newTestChart(t, "./testdata/simple"),
252-
deployedRelease: newTestRelease(newTestChart(t, "./testdata/simple"), map[string]interface{}{"key": ""}, "deployed", "deployed-ns"),
254+
deployedRelease: newTestRelease(newTestChart(t, "./testdata/simple"), map[string]interface{}{"key": "", "int": int64(1)}, "deployed", "deployed-ns"),
253255
want: true,
254256
},
257+
{
258+
name: "nil values",
259+
releaseName: "deployed",
260+
releaseNs: "deployed-ns",
261+
values: nil,
262+
chart: newTestChart(t, "./testdata/simple"),
263+
deployedRelease: newTestRelease(newTestChart(t, "./testdata/simple"), map[string]interface{}{}, "deployed", "deployed-ns"),
264+
want: false,
265+
},
255266
}
256267
for _, test := range tests {
257268
t.Run(test.name, func(t *testing.T) {
@@ -273,13 +284,16 @@ func newTestChart(t *testing.T, path string) *cpb.Chart {
273284
return chart
274285
}
275286

276-
func newTestRelease(chart *cpb.Chart, values map[string]interface{}, name, namespace string) *rpb.Release {
287+
func newTestRelease(chart *cpb.Chart, values map[string]interface{}, name, namespace string) *rpb.Release { // nolint: unparam
277288
release := rpb.Mock(&rpb.MockReleaseOptions{
278289
Name: name,
279290
Namespace: namespace,
280-
Chart: chart,
281291
Version: 1,
282292
})
293+
294+
buffer := &bytes.Buffer{}
295+
_ = json.NewEncoder(buffer).Encode(chart)
296+
_ = json.NewDecoder(buffer).Decode(release.Chart)
283297
release.Config = values
284298
return release
285299
}

0 commit comments

Comments
 (0)