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