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"
|
cascade: "background"
|
||||||
# insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart
|
# insecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart
|
||||||
insecureSkipTLSVerify: false
|
insecureSkipTLSVerify: false
|
||||||
|
# suppressDiff skip the helm diff output. Useful for charts which produces large not helpful diff, default: false
|
||||||
|
suppressDiff: false
|
||||||
|
|
||||||
|
|
||||||
# Local chart example
|
# Local chart example
|
||||||
- name: grafana # name of this release
|
- 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 is used to inherit a release template from a release or another release template
|
||||||
Inherit Inherits `yaml:"inherit,omitempty"`
|
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 {
|
func (r *Inherits) UnmarshalYAML(unmarshal func(any) error) error {
|
||||||
|
|
@ -1690,6 +1693,7 @@ type diffPrepareResult struct {
|
||||||
errors []*ReleaseError
|
errors []*ReleaseError
|
||||||
files []string
|
files []string
|
||||||
upgradeDueToSkippedDiff bool
|
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 {
|
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)
|
st.ApplyOverrides(release)
|
||||||
|
|
||||||
|
suppressDiff := false
|
||||||
|
if release.SuppressDiff != nil && *release.SuppressDiff {
|
||||||
|
suppressDiff = true
|
||||||
|
}
|
||||||
|
|
||||||
if opt.SkipDiffOnInstall && !isInstalled(release) {
|
if opt.SkipDiffOnInstall && !isInstalled(release) {
|
||||||
results <- diffPrepareResult{release: release, upgradeDueToSkippedDiff: true}
|
results <- diffPrepareResult{release: release, upgradeDueToSkippedDiff: true, suppressDiff: suppressDiff}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1849,9 +1858,9 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
||||||
for i, e := range errs {
|
for i, e := range errs {
|
||||||
rsErrs[i] = newReleaseFailedError(release, e)
|
rsErrs[i] = newReleaseFailedError(release, e)
|
||||||
}
|
}
|
||||||
results <- diffPrepareResult{errors: rsErrs, files: files}
|
results <- diffPrepareResult{errors: rsErrs, files: files, suppressDiff: suppressDiff}
|
||||||
} else {
|
} 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
|
flags := prep.flags
|
||||||
release := prep.release
|
release := prep.release
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
|
|
||||||
|
releaseSuppressDiff := suppressDiff
|
||||||
|
if prep.suppressDiff {
|
||||||
|
releaseSuppressDiff = true
|
||||||
|
}
|
||||||
|
|
||||||
if prep.upgradeDueToSkippedDiff {
|
if prep.upgradeDueToSkippedDiff {
|
||||||
results <- diffResult{release, &ReleaseError{ReleaseSpec: release, err: nil, Code: HelmDiffExitCodeChanged}, buf}
|
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) {
|
switch e := err.(type) {
|
||||||
case helmexec.ExitError:
|
case helmexec.ExitError:
|
||||||
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood
|
// 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{
|
run(testcase{
|
||||||
subject: "baseline",
|
subject: "baseline",
|
||||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||||
want: "foo-values-58d856f487",
|
want: "foo-values-7884dc8d7c",
|
||||||
})
|
})
|
||||||
|
|
||||||
run(testcase{
|
run(testcase{
|
||||||
subject: "different bytes content",
|
subject: "different bytes content",
|
||||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||||
data: []byte(`{"k":"v"}`),
|
data: []byte(`{"k":"v"}`),
|
||||||
want: "foo-values-6d96d874f6",
|
want: "foo-values-67d6bbf498",
|
||||||
})
|
})
|
||||||
|
|
||||||
run(testcase{
|
run(testcase{
|
||||||
subject: "different map content",
|
subject: "different map content",
|
||||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||||
data: map[string]any{"k": "v"},
|
data: map[string]any{"k": "v"},
|
||||||
want: "foo-values-77cdb7dbb6",
|
want: "foo-values-5d86d867b",
|
||||||
})
|
})
|
||||||
|
|
||||||
run(testcase{
|
run(testcase{
|
||||||
subject: "different chart",
|
subject: "different chart",
|
||||||
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
|
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
|
||||||
want: "foo-values-66cd476bbb",
|
want: "foo-values-5c47fc4b6d",
|
||||||
})
|
})
|
||||||
|
|
||||||
run(testcase{
|
run(testcase{
|
||||||
subject: "different name",
|
subject: "different name",
|
||||||
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
|
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
|
||||||
want: "bar-values-5d59565d5b",
|
want: "bar-values-7c87d9b8b",
|
||||||
})
|
})
|
||||||
|
|
||||||
run(testcase{
|
run(testcase{
|
||||||
subject: "specific ns",
|
subject: "specific ns",
|
||||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
|
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
|
||||||
want: "myns-foo-values-644b7dfd78",
|
want: "myns-foo-values-7fbc456bb4",
|
||||||
})
|
})
|
||||||
|
|
||||||
for id, n := range ids {
|
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