feat: Allow to skip diff output on release base (#906)
* feat: Allow to skip diff output on release base Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de> * fix tests Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de> * feat: Allow to skip diff output on release base Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de> * fix tests Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de> * s/skipDiffOutput/suppressDiff Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de> * s/skipDiffOutput/suppressDiff Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de> * fix tests Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de> --------- Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de> Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de>
This commit is contained in:
parent
b51842bb61
commit
d1c260af5f
|
|
@ -315,6 +315,9 @@ releases:
|
|||
cascade: "background"
|
||||
# insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart
|
||||
insecureSkipTLSVerify: false
|
||||
# suppressDiff skip the helm diff output. Useful for charts which produces large not helpful diff, default: false
|
||||
suppressDiff: false
|
||||
|
||||
|
||||
# Local chart example
|
||||
- name: grafana # name of this release
|
||||
|
|
|
|||
|
|
@ -365,6 +365,9 @@ type ReleaseSpec struct {
|
|||
|
||||
// Inherit is used to inherit a release template from a release or another release template
|
||||
Inherit Inherits `yaml:"inherit,omitempty"`
|
||||
|
||||
// SuppressDiff skip the helm diff output. Useful for charts which produces large not helpful diff.
|
||||
SuppressDiff *bool `yaml:"suppressDiff,omitempty"`
|
||||
}
|
||||
|
||||
func (r *Inherits) UnmarshalYAML(unmarshal func(any) error) error {
|
||||
|
|
@ -1690,6 +1693,7 @@ type diffPrepareResult struct {
|
|||
errors []*ReleaseError
|
||||
files []string
|
||||
upgradeDueToSkippedDiff bool
|
||||
suppressDiff bool
|
||||
}
|
||||
|
||||
func (st *HelmState) commonDiffFlags(detailedExitCode bool, stripTrailingCR bool, includeTests bool, suppress []string, suppressSecrets bool, showSecrets bool, noHooks bool, opt *DiffOpts) []string {
|
||||
|
|
@ -1814,8 +1818,13 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
|||
|
||||
st.ApplyOverrides(release)
|
||||
|
||||
suppressDiff := false
|
||||
if release.SuppressDiff != nil && *release.SuppressDiff {
|
||||
suppressDiff = true
|
||||
}
|
||||
|
||||
if opt.SkipDiffOnInstall && !isInstalled(release) {
|
||||
results <- diffPrepareResult{release: release, upgradeDueToSkippedDiff: true}
|
||||
results <- diffPrepareResult{release: release, upgradeDueToSkippedDiff: true, suppressDiff: suppressDiff}
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -1849,9 +1858,9 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
|||
for i, e := range errs {
|
||||
rsErrs[i] = newReleaseFailedError(release, e)
|
||||
}
|
||||
results <- diffPrepareResult{errors: rsErrs, files: files}
|
||||
results <- diffPrepareResult{errors: rsErrs, files: files, suppressDiff: suppressDiff}
|
||||
} else {
|
||||
results <- diffPrepareResult{release: release, flags: flags, errors: []*ReleaseError{}, files: files}
|
||||
results <- diffPrepareResult{release: release, flags: flags, errors: []*ReleaseError{}, files: files, suppressDiff: suppressDiff}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -1976,9 +1985,15 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st
|
|||
flags := prep.flags
|
||||
release := prep.release
|
||||
buf := &bytes.Buffer{}
|
||||
|
||||
releaseSuppressDiff := suppressDiff
|
||||
if prep.suppressDiff {
|
||||
releaseSuppressDiff = true
|
||||
}
|
||||
|
||||
if prep.upgradeDueToSkippedDiff {
|
||||
results <- diffResult{release, &ReleaseError{ReleaseSpec: release, err: nil, Code: HelmDiffExitCodeChanged}, buf}
|
||||
} else if err := helm.DiffRelease(st.createHelmContextWithWriter(release, buf), release.Name, normalizeChart(st.basePath, release.ChartPathOrName()), suppressDiff, flags...); err != nil {
|
||||
} else if err := helm.DiffRelease(st.createHelmContextWithWriter(release, buf), release.Name, normalizeChart(st.basePath, release.ChartPathOrName()), releaseSuppressDiff, flags...); err != nil {
|
||||
switch e := err.(type) {
|
||||
case helmexec.ExitError:
|
||||
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood
|
||||
|
|
|
|||
|
|
@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
|
|||
run(testcase{
|
||||
subject: "baseline",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
want: "foo-values-58d856f487",
|
||||
want: "foo-values-7884dc8d7c",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different bytes content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: []byte(`{"k":"v"}`),
|
||||
want: "foo-values-6d96d874f6",
|
||||
want: "foo-values-67d6bbf498",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different map content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: map[string]any{"k": "v"},
|
||||
want: "foo-values-77cdb7dbb6",
|
||||
want: "foo-values-5d86d867b",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different chart",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
|
||||
want: "foo-values-66cd476bbb",
|
||||
want: "foo-values-5c47fc4b6d",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different name",
|
||||
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
|
||||
want: "bar-values-5d59565d5b",
|
||||
want: "bar-values-7c87d9b8b",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "specific ns",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
|
||||
want: "myns-foo-values-644b7dfd78",
|
||||
want: "myns-foo-values-7fbc456bb4",
|
||||
})
|
||||
|
||||
for id, n := range ids {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
releases:
|
||||
- name: foo
|
||||
chart: ../../../charts/raw
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-1
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
foo: FOO
|
||||
dep:
|
||||
templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-2
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
bar: BAR
|
||||
suppressDiff: true
|
||||
- name: baz
|
||||
chart: ../../../charts/raw
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-3
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
baz: BAZ
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
Building dependency release=foo, chart=../../../charts/raw
|
||||
Building dependency release=baz, chart=../../../charts/raw
|
||||
Comparing release=foo, chart=../../../charts/raw
|
||||
|
||||
Comparing release=baz, chart=../../../charts/raw
|
||||
********************
|
||||
|
||||
Release was not present in Helm. Diff will show entire contents as new.
|
||||
|
||||
********************
|
||||
helmfile-tests, baz-3, ConfigMap (v1) has been added:
|
||||
-
|
||||
+ # Source: raw/templates/resources.yaml
|
||||
+ apiVersion: v1
|
||||
+ kind: ConfigMap
|
||||
+ metadata:
|
||||
+ name: baz-3
|
||||
+ namespace: helmfile-tests
|
||||
+ data:
|
||||
+ baz: BAZ
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
Live output is enabled
|
||||
Building dependency release=foo, chart=../../../charts/raw
|
||||
Building dependency release=baz, chart=../../../charts/raw
|
||||
********************
|
||||
|
||||
Release was not present in Helm. Diff will show entire contents as new.
|
||||
|
||||
********************
|
||||
helmfile-tests, baz-3, ConfigMap (v1) has been added:
|
||||
-
|
||||
+ # Source: raw/templates/resources.yaml
|
||||
+ apiVersion: v1
|
||||
+ kind: ConfigMap
|
||||
+ metadata:
|
||||
+ name: baz-3
|
||||
+ namespace: helmfile-tests
|
||||
+ data:
|
||||
+ baz: BAZ
|
||||
Comparing release=foo, chart=../../../charts/raw
|
||||
Comparing release=baz, chart=../../../charts/raw
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
Building dependency release=foo, chart=../../../charts/raw
|
||||
Building dependency release=baz, chart=../../../charts/raw
|
||||
Templating release=foo, chart=../../../charts/raw
|
||||
---
|
||||
# Source: raw/templates/resources.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: foo-1
|
||||
namespace: helmfile-tests
|
||||
data:
|
||||
foo: FOO
|
||||
|
||||
Templating release=baz, chart=../../../charts/raw
|
||||
---
|
||||
# Source: raw/templates/resources.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: baz-3
|
||||
namespace: helmfile-tests
|
||||
data:
|
||||
baz: BAZ
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
Live output is enabled
|
||||
Building dependency release=foo, chart=../../../charts/raw
|
||||
Building dependency release=baz, chart=../../../charts/raw
|
||||
Templating release=foo, chart=../../../charts/raw
|
||||
---
|
||||
# Source: raw/templates/resources.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: foo-1
|
||||
namespace: helmfile-tests
|
||||
data:
|
||||
foo: FOO
|
||||
|
||||
Templating release=baz, chart=../../../charts/raw
|
||||
---
|
||||
# Source: raw/templates/resources.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: baz-3
|
||||
namespace: helmfile-tests
|
||||
data:
|
||||
baz: BAZ
|
||||
|
||||
Loading…
Reference in New Issue