Skip to content

Commit adc33c8

Browse files
Revert "fix(helm): properly compare existing and candidate releases (operator-framework#4937)"
This reverts commit cae12a2. Signed-off-by: varshaprasad96 <[email protected]>
1 parent 0e7641e commit adc33c8

File tree

14 files changed

+22
-185
lines changed

14 files changed

+22
-185
lines changed

internal/helm/release/manager.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
"helm.sh/helm/v3/pkg/storage/driver"
3333
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
3434
apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
35-
apiequality "k8s.io/apimachinery/pkg/api/equality"
3635
apierrors "k8s.io/apimachinery/pkg/api/errors"
3736
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3837
"k8s.io/apimachinery/pkg/runtime"
@@ -126,7 +125,14 @@ func (m *manager) Sync(ctx context.Context) error {
126125
m.deployedRelease = deployedRelease
127126
m.isInstalled = true
128127

129-
m.isUpgradeRequired = m.isUpgrade(deployedRelease)
128+
// Get the next candidate release to determine if an upgrade is necessary.
129+
candidateRelease, err := m.getCandidateRelease(m.namespace, m.releaseName, m.chart, m.values)
130+
if err != nil {
131+
return fmt.Errorf("failed to get candidate release: %w", err)
132+
}
133+
if deployedRelease.Manifest != candidateRelease.Manifest {
134+
m.isUpgradeRequired = true
135+
}
130136

131137
return nil
132138
}
@@ -135,20 +141,6 @@ func notFoundErr(err error) bool {
135141
return err != nil && strings.Contains(err.Error(), "not found")
136142
}
137143

138-
func (m manager) isUpgrade(deployedRelease *rpb.Release) bool {
139-
if deployedRelease == nil {
140-
return false
141-
}
142-
143-
// Judging whether to skip updates
144-
skip := m.namespace == deployedRelease.Namespace
145-
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)
148-
149-
return !skip
150-
}
151-
152144
func (m manager) getDeployedRelease() (*rpb.Release, error) {
153145
deployedRelease, err := m.storageBackend.Deployed(m.releaseName)
154146
if err != nil {
@@ -160,6 +152,14 @@ func (m manager) getDeployedRelease() (*rpb.Release, error) {
160152
return deployedRelease, nil
161153
}
162154

155+
func (m manager) getCandidateRelease(namespace, name string, chart *cpb.Chart,
156+
values map[string]interface{}) (*rpb.Release, error) {
157+
upgrade := action.NewUpgrade(m.actionConfig)
158+
upgrade.Namespace = namespace
159+
upgrade.DryRun = true
160+
return upgrade.Run(name, chart, values)
161+
}
162+
163163
// InstallRelease performs a Helm release install.
164164
func (m manager) InstallRelease(ctx context.Context, opts ...InstallOption) (*rpb.Release, error) {
165165
install := action.NewInstall(m.actionConfig)

internal/helm/release/manager_test.go

Lines changed: 6 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,16 @@ package release
1717
import (
1818
"testing"
1919

20-
"github.com/stretchr/testify/assert"
21-
cpb "helm.sh/helm/v3/pkg/chart"
22-
lpb "helm.sh/helm/v3/pkg/chart/loader"
23-
rpb "helm.sh/helm/v3/pkg/release"
20+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
21+
apitypes "k8s.io/apimachinery/pkg/types"
22+
"k8s.io/cli-runtime/pkg/resource"
23+
2424
appsv1 "k8s.io/api/apps/v1"
2525
v1 "k8s.io/api/core/v1"
2626
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
27+
28+
"github.com/stretchr/testify/assert"
2829
"k8s.io/apimachinery/pkg/runtime"
29-
apitypes "k8s.io/apimachinery/pkg/types"
30-
"k8s.io/cli-runtime/pkg/resource"
3130
)
3231

3332
func newTestUnstructured(containers []interface{}) *unstructured.Unstructured {
@@ -214,72 +213,3 @@ func TestManagerGenerateStrategicMergePatch(t *testing.T) {
214213
assert.Equal(t, test.patch, string(diff))
215214
}
216215
}
217-
218-
func TestManagerisUpgrade(t *testing.T) {
219-
tests := []struct {
220-
name string
221-
releaseName string
222-
releaseNs string
223-
values map[string]interface{}
224-
chart *cpb.Chart
225-
deployedRelease *rpb.Release
226-
want bool
227-
}{
228-
{
229-
name: "ok",
230-
releaseName: "deployed",
231-
releaseNs: "deployed-ns",
232-
values: map[string]interface{}{"key": "value"},
233-
chart: newTestChart(t, "./testdata/simple"),
234-
deployedRelease: newTestRelease(newTestChart(t, "./testdata/simple"), map[string]interface{}{"key": "value"}, "deployed", "deployed-ns"),
235-
want: false,
236-
},
237-
{
238-
name: "different chart",
239-
releaseName: "deployed",
240-
releaseNs: "deployed-ns",
241-
values: map[string]interface{}{"key": "value"},
242-
chart: newTestChart(t, "./testdata/simple"),
243-
deployedRelease: newTestRelease(newTestChart(t, "./testdata/simpledf"), map[string]interface{}{"key": "value"}, "deployed", "deployed-ns"),
244-
want: true,
245-
},
246-
{
247-
name: "different values",
248-
releaseName: "deployed",
249-
releaseNs: "deployed-ns",
250-
values: map[string]interface{}{"key": "1"},
251-
chart: newTestChart(t, "./testdata/simple"),
252-
deployedRelease: newTestRelease(newTestChart(t, "./testdata/simple"), map[string]interface{}{"key": ""}, "deployed", "deployed-ns"),
253-
want: true,
254-
},
255-
}
256-
for _, test := range tests {
257-
t.Run(test.name, func(t *testing.T) {
258-
m := manager{
259-
releaseName: test.releaseName,
260-
namespace: test.releaseNs,
261-
values: test.values,
262-
chart: test.chart,
263-
}
264-
isUpgrade := m.isUpgrade(test.deployedRelease)
265-
assert.Equal(t, test.want, isUpgrade)
266-
})
267-
}
268-
}
269-
270-
func newTestChart(t *testing.T, path string) *cpb.Chart {
271-
chart, err := lpb.Load(path)
272-
assert.Nil(t, err)
273-
return chart
274-
}
275-
276-
func newTestRelease(chart *cpb.Chart, values map[string]interface{}, name, namespace string) *rpb.Release {
277-
release := rpb.Mock(&rpb.MockReleaseOptions{
278-
Name: name,
279-
Namespace: namespace,
280-
Chart: chart,
281-
Version: 1,
282-
})
283-
release.Config = values
284-
return release
285-
}

internal/helm/release/testdata/simple/.helmignore

Lines changed: 0 additions & 21 deletions
This file was deleted.

internal/helm/release/testdata/simple/Chart.yaml

Lines changed: 0 additions & 8 deletions
This file was deleted.

internal/helm/release/testdata/simple/templates/NOTES.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

internal/helm/release/testdata/simple/templates/_helpers.tpl

Lines changed: 0 additions & 7 deletions
This file was deleted.

internal/helm/release/testdata/simple/templates/secrets.yaml

Lines changed: 0 additions & 8 deletions
This file was deleted.

internal/helm/release/testdata/simple/values.yaml

Lines changed: 0 additions & 1 deletion
This file was deleted.

internal/helm/release/testdata/simpledf/.helmignore

Lines changed: 0 additions & 21 deletions
This file was deleted.

internal/helm/release/testdata/simpledf/Chart.yaml

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)