Skip to content

Commit 36eb5c5

Browse files
committed
fix: issue-5041 (#5042)
Signed-off-by: cndoit18 <[email protected]>
1 parent 35313e8 commit 36eb5c5

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

internal/helm/release/manager.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ func notFoundErr(err error) bool {
138138
return err != nil && strings.Contains(err.Error(), "not found")
139139
}
140140

141+
func (m manager) getCandidateRelease(namespace, name string, chart *cpb.Chart,
142+
values map[string]interface{}) (*rpb.Release, error) {
143+
upgrade := action.NewUpgrade(m.actionConfig)
144+
upgrade.Namespace = namespace
145+
upgrade.DryRun = true
146+
return upgrade.Run(name, chart, values)
147+
}
148+
141149
// This is caused by the different logic of loading from local and loading from secret
142150
// For example, the Raw field, which has the tag `json:"-"`, causes the Unmarshal to be lost when it into Release
143151
// We need to make them follow the JSON tag
@@ -161,16 +169,20 @@ func (m manager) isUpgrade(deployedRelease *rpb.Release) (bool, error) {
161169
return false, nil
162170
}
163171

172+
candidateRelease, err := m.getCandidateRelease(m.namespace, m.releaseName, m.chart, m.values)
173+
if err != nil {
174+
return false, err
175+
}
176+
164177
// Judging whether to skip updates
165-
skip := m.namespace == deployedRelease.Namespace
166-
skip = skip && m.releaseName == deployedRelease.Name
178+
skip := candidateRelease.Namespace == deployedRelease.Namespace
179+
skip = skip && candidateRelease.Name == deployedRelease.Name
167180

168181
ok, err := equalJSONStruct(m.chart, deployedRelease.Chart)
169182
if err != nil {
170183
return false, err
171184
}
172185
skip = skip && ok
173-
174186
ok, err = equalJSONStruct(m.values, deployedRelease.Config)
175187
return !(skip && ok), err
176188
}

internal/helm/release/manager_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,18 @@ package release
1717
import (
1818
"bytes"
1919
"encoding/json"
20+
"io/ioutil"
2021
"testing"
2122

2223
"github.com/stretchr/testify/assert"
24+
"helm.sh/helm/v3/pkg/action"
2325
cpb "helm.sh/helm/v3/pkg/chart"
2426
lpb "helm.sh/helm/v3/pkg/chart/loader"
27+
"helm.sh/helm/v3/pkg/chartutil"
28+
kubefake "helm.sh/helm/v3/pkg/kube/fake"
2529
rpb "helm.sh/helm/v3/pkg/release"
30+
"helm.sh/helm/v3/pkg/storage"
31+
"helm.sh/helm/v3/pkg/storage/driver"
2632
appsv1 "k8s.io/api/apps/v1"
2733
v1 "k8s.io/api/core/v1"
2834
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -271,7 +277,17 @@ func TestManagerisUpgrade(t *testing.T) {
271277
namespace: test.releaseNs,
272278
values: test.values,
273279
chart: test.chart,
280+
actionConfig: &action.Configuration{
281+
Releases: storage.Init(driver.NewMemory()),
282+
KubeClient: &kubefake.FailingKubeClient{PrintingKubeClient: kubefake.PrintingKubeClient{Out: ioutil.Discard}},
283+
Capabilities: chartutil.DefaultCapabilities,
284+
Log: t.Logf,
285+
},
274286
}
287+
<<<<<<< HEAD
288+
=======
289+
assert.Equal(t, nil, m.actionConfig.Releases.Create(test.deployedRelease))
290+
>>>>>>> e8e6009e (fix: issue-5041 (#5042))
275291
isUpgrade, err := m.isUpgrade(test.deployedRelease)
276292
assert.Equal(t, test.want, isUpgrade)
277293
assert.Equal(t, nil, err)
@@ -290,11 +306,15 @@ func newTestRelease(chart *cpb.Chart, values map[string]interface{}, name, names
290306
Name: name,
291307
Namespace: namespace,
292308
Version: 1,
309+
Chart: chart,
293310
})
294311

312+
<<<<<<< HEAD
295313
buffer := &bytes.Buffer{}
296314
_ = json.NewEncoder(buffer).Encode(chart)
297315
_ = json.NewDecoder(buffer).Decode(release.Chart)
316+
=======
317+
>>>>>>> e8e6009e (fix: issue-5041 (#5042))
298318
release.Config = values
299319
return release
300320
}

0 commit comments

Comments
 (0)