Fix post-renderer flag not working in diff and template subcommand (#691)
Signed-off-by: xiaomudk <xiaomudk@gmail.com>
This commit is contained in:
		
							parent
							
								
									37c213210e
								
							
						
					
					
						commit
						a8574ba0cf
					
				|  | @ -51,6 +51,7 @@ func NewDiffCmd(globalCfg *config.GlobalImpl) *cobra.Command { | ||||||
| 	f.StringArrayVar(&diffOptions.Suppress, "suppress", nil, "suppress specified Kubernetes objects in the output. Can be provided multiple times. For example: --suppress KeycloakClient --suppress VaultSecret") | 	f.StringArrayVar(&diffOptions.Suppress, "suppress", nil, "suppress specified Kubernetes objects in the output. Can be provided multiple times. For example: --suppress KeycloakClient --suppress VaultSecret") | ||||||
| 	f.BoolVar(&diffOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reuse-values"`) | 	f.BoolVar(&diffOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reuse-values"`) | ||||||
| 	f.BoolVar(&diffOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reset-values"`) | 	f.BoolVar(&diffOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm diff upgrade --install --reset-values"`) | ||||||
|  | 	f.StringVar(&diffOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`) | ||||||
| 
 | 
 | ||||||
| 	return cmd | 	return cmd | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1569,6 +1569,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error) | ||||||
| 		helm := r.helm | 		helm := r.helm | ||||||
| 
 | 
 | ||||||
| 		helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...) | 		helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...) | ||||||
|  | 		helm.SetPostRenderer(c.PostRenderer()) | ||||||
| 
 | 
 | ||||||
| 		var errs []error | 		var errs []error | ||||||
| 
 | 
 | ||||||
|  | @ -1873,6 +1874,8 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) { | ||||||
| 			helm.SetExtraArgs(args...) | 			helm.SetExtraArgs(args...) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		helm.SetPostRenderer(c.PostRenderer()) | ||||||
|  | 
 | ||||||
| 		opts := &state.TemplateOpts{ | 		opts := &state.TemplateOpts{ | ||||||
| 			Set:               c.Set(), | 			Set:               c.Set(), | ||||||
| 			IncludeCRDs:       c.IncludeCRDs(), | 			IncludeCRDs:       c.IncludeCRDs(), | ||||||
|  |  | ||||||
|  | @ -108,6 +108,7 @@ type SyncConfigProvider interface { | ||||||
| 
 | 
 | ||||||
| type DiffConfigProvider interface { | type DiffConfigProvider interface { | ||||||
| 	Args() string | 	Args() string | ||||||
|  | 	PostRenderer() string | ||||||
| 
 | 
 | ||||||
| 	Values() []string | 	Values() []string | ||||||
| 	Set() []string | 	Set() []string | ||||||
|  |  | ||||||
|  | @ -150,6 +150,10 @@ func (a diffConfig) ResetValues() bool { | ||||||
| 	return !a.reuseValues | 	return !a.reuseValues | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (a diffConfig) PostRenderer() string { | ||||||
|  | 	return "" | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestDiff(t *testing.T) { | func TestDiff(t *testing.T) { | ||||||
| 	type flags struct { | 	type flags struct { | ||||||
| 		skipNeeds    bool | 		skipNeeds    bool | ||||||
|  |  | ||||||
|  | @ -40,6 +40,8 @@ type DiffOptions struct { | ||||||
| 	ReuseValues bool | 	ReuseValues bool | ||||||
| 	// ResetValues is true if helm command should reset values to charts' default
 | 	// ResetValues is true if helm command should reset values to charts' default
 | ||||||
| 	ResetValues bool | 	ResetValues bool | ||||||
|  | 	// Propagate '--post-renderer' to helmv3 template and helm install
 | ||||||
|  | 	PostRenderer string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewDiffOptions creates a new Apply
 | // NewDiffOptions creates a new Apply
 | ||||||
|  | @ -171,3 +173,8 @@ func (t *DiffImpl) ReuseValues() bool { | ||||||
| func (t *DiffImpl) ResetValues() bool { | func (t *DiffImpl) ResetValues() bool { | ||||||
| 	return t.DiffOptions.ResetValues | 	return t.DiffOptions.ResetValues | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // PostRenderer returns the PostRenderer.
 | ||||||
|  | func (t *DiffImpl) PostRenderer() string { | ||||||
|  | 	return t.DiffOptions.PostRenderer | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -29,10 +29,10 @@ func (st *HelmState) appendHelmXFlags(flags []string, release *ReleaseSpec) []st | ||||||
| func (st *HelmState) appendPostRenderFlags(flags []string, release *ReleaseSpec, helm helmexec.Interface) []string { | func (st *HelmState) appendPostRenderFlags(flags []string, release *ReleaseSpec, helm helmexec.Interface) []string { | ||||||
| 	switch { | 	switch { | ||||||
| 	// helm.GetPostRenderer() comes from cmd flag.
 | 	// helm.GetPostRenderer() comes from cmd flag.
 | ||||||
| 	case helm.GetPostRenderer() != "": |  | ||||||
| 		flags = append(flags, "--post-renderer", helm.GetPostRenderer()) |  | ||||||
| 	case release.PostRenderer != nil && *release.PostRenderer != "": | 	case release.PostRenderer != nil && *release.PostRenderer != "": | ||||||
| 		flags = append(flags, "--post-renderer", *release.PostRenderer) | 		flags = append(flags, "--post-renderer", *release.PostRenderer) | ||||||
|  | 	case helm.GetPostRenderer() != "": | ||||||
|  | 		flags = append(flags, "--post-renderer", helm.GetPostRenderer()) | ||||||
| 	case st.HelmDefaults.PostRenderer != nil && *st.HelmDefaults.PostRenderer != "": | 	case st.HelmDefaults.PostRenderer != nil && *st.HelmDefaults.PostRenderer != "": | ||||||
| 		flags = append(flags, "--post-renderer", *st.HelmDefaults.PostRenderer) | 		flags = append(flags, "--post-renderer", *st.HelmDefaults.PostRenderer) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -82,7 +82,7 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes | ||||||
| . ${dir}/test-cases/secretssops.sh | . ${dir}/test-cases/secretssops.sh | ||||||
| . ${dir}/test-cases/yaml-overwrite.sh | . ${dir}/test-cases/yaml-overwrite.sh | ||||||
| . ${dir}/test-cases/chart-needs.sh | . ${dir}/test-cases/chart-needs.sh | ||||||
| . ${dir}/test-cases/postrender-diff.sh | . ${dir}/test-cases/postrender.sh | ||||||
| 
 | 
 | ||||||
| # ALL DONE ----------------------------------------------------------------------------------------------------------- | # ALL DONE ----------------------------------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,28 +0,0 @@ | ||||||
| postrender_diff_case_input_dir="${cases_dir}/postrender-diff/input" |  | ||||||
| postrender_diff_case_output_dir="${cases_dir}/postrender-diff/output" |  | ||||||
| 
 |  | ||||||
| config_file="helmfile.yaml" |  | ||||||
| if [[ ${HELMFILE_V1MODE} = true ]]; then |  | ||||||
|   pushd "${postrender_diff_case_input_dir}" |  | ||||||
|   mv "${config_file}" "${config_file}.gotmpl" |  | ||||||
|   config_file="${config_file}.gotmpl" |  | ||||||
|   popd |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| postrender_diff_out_file=${postrender_diff_case_output_dir}/result |  | ||||||
| if [[ $EXTRA_HELMFILE_FLAGS == *--enable-live-output* ]]; then |  | ||||||
|     postrender_diff_out_file=${postrender_diff_case_output_dir}/result-live |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| postrender_diff_tmp=$(mktemp -d) |  | ||||||
| postrender_diff_reverse=${postrender_diff_tmp}/postrender.diff.build.yaml |  | ||||||
| 
 |  | ||||||
| test_start "postrender diff" |  | ||||||
| info "Comparing postrender diff output ${postrender_diff_reverse} with ${postrender_diff_case_output_dir}/result.yaml" |  | ||||||
| for i in $(seq 10); do |  | ||||||
|     info "Comparing build/postrender-diff #$i" |  | ||||||
|     ${helmfile} -f ${postrender_diff_case_input_dir}/${config_file} diff --concurrency 1 &> ${postrender_diff_reverse} || fail "\"helmfile diff\" shouldn't fail" |  | ||||||
|     diff -u  ${postrender_diff_out_file} ${postrender_diff_reverse} || fail "\"helmfile diff\" should be consistent" |  | ||||||
|     echo code=$? |  | ||||||
| done |  | ||||||
| test_pass "postrender diff" |  | ||||||
|  | @ -0,0 +1,44 @@ | ||||||
|  | postrender_case_input_dir="${cases_dir}/postrender/input" | ||||||
|  | postrender_case_output_dir="${cases_dir}/postrender/output" | ||||||
|  | 
 | ||||||
|  | config_file="helmfile.yaml" | ||||||
|  | if [[ ${HELMFILE_V1MODE} = true ]]; then | ||||||
|  |   pushd "${postrender_case_input_dir}" | ||||||
|  |   mv "${config_file}" "${config_file}.gotmpl" | ||||||
|  |   config_file="${config_file}.gotmpl" | ||||||
|  |   popd | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | postrender_diff_out_file=${postrender_case_output_dir}/diff-result | ||||||
|  | if [[ $EXTRA_HELMFILE_FLAGS == *--enable-live-output* ]]; then | ||||||
|  |     postrender_diff_out_file=${postrender_case_output_dir}/diff-result-live | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | postrender_template_out_file=${postrender_case_output_dir}/template-result | ||||||
|  | if [[ $EXTRA_HELMFILE_FLAGS == *--enable-live-output* ]]; then | ||||||
|  |     postrender_template_out_file=${postrender_case_output_dir}/template-result-live | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | postrender_diff_tmp=$(mktemp -d) | ||||||
|  | postrender_diff_reverse=${postrender_diff_tmp}/postrender.diff.build.yaml | ||||||
|  | postrender_template_reverse=${postrender_diff_tmp}/postrender.template.build.yaml | ||||||
|  | 
 | ||||||
|  | test_start "postrender diff" | ||||||
|  | info "Comparing postrender diff output ${postrender_diff_reverse} with ${postrender_case_output_dir}/result.yaml" | ||||||
|  | for i in $(seq 10); do | ||||||
|  |     info "Comparing build/postrender-diff #$i" | ||||||
|  |     ${helmfile} -f ${postrender_case_input_dir}/${config_file} diff --concurrency 1 --post-renderer ./add-cm1.bash &> ${postrender_diff_reverse} || fail "\"helmfile diff\" shouldn't fail" | ||||||
|  |     diff -u  ${postrender_diff_out_file} ${postrender_diff_reverse} || fail "\"helmfile diff\" should be consistent" | ||||||
|  |     echo code=$? | ||||||
|  | done | ||||||
|  | test_pass "postrender diff" | ||||||
|  | 
 | ||||||
|  | test_start "postrender template" | ||||||
|  | info "Comparing postrender template output ${postrender_template_reverse} with ${postrender_case_output_dir}/result.yaml" | ||||||
|  | for i in $(seq 10); do | ||||||
|  |     info "Comparing build/postrender-diff #$i" | ||||||
|  |     ${helmfile} -f ${postrender_case_input_dir}/${config_file} template --concurrency 1 --post-renderer ./add-cm1.bash &> ${postrender_template_reverse} || fail "\"helmfile template\" shouldn't fail" | ||||||
|  |     diff -u  ${postrender_template_out_file} ${postrender_template_reverse} || fail "\"helmfile template\" should be consistent" | ||||||
|  |     echo code=$? | ||||||
|  | done | ||||||
|  | test_pass "postrender template" | ||||||
|  | @ -1,6 +1,3 @@ | ||||||
| helmDefaults: |  | ||||||
|   postRenderer: ./add-cm1.bash |  | ||||||
| 
 |  | ||||||
| releases: | releases: | ||||||
| - name: foo | - name: foo | ||||||
|   chart: ../../../charts/raw |   chart: ../../../charts/raw | ||||||
|  | @ -0,0 +1,38 @@ | ||||||
|  | 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 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | data: | ||||||
|  |   two: TWO | ||||||
|  | metadata: | ||||||
|  |   name: cm2 | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | data: | ||||||
|  |   one: ONE | ||||||
|  | metadata: | ||||||
|  |   name: cm1 | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,39 @@ | ||||||
|  | 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 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | data: | ||||||
|  |   two: TWO | ||||||
|  | metadata: | ||||||
|  |   name: cm2 | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | data: | ||||||
|  |   one: ONE | ||||||
|  | metadata: | ||||||
|  |   name: cm1 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue