Fix post-renderer flag not working in diff and template subcommand (#691)

Signed-off-by: xiaomudk <xiaomudk@gmail.com>
This commit is contained in:
xiaomudk 2023-02-14 10:47:24 +08:00 committed by GitHub
parent 37c213210e
commit a8574ba0cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 140 additions and 34 deletions

View File

@ -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.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.StringVar(&diffOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)
return cmd
}

View File

@ -1569,6 +1569,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error)
helm := r.helm
helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...)
helm.SetPostRenderer(c.PostRenderer())
var errs []error
@ -1873,6 +1874,8 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) {
helm.SetExtraArgs(args...)
}
helm.SetPostRenderer(c.PostRenderer())
opts := &state.TemplateOpts{
Set: c.Set(),
IncludeCRDs: c.IncludeCRDs(),

View File

@ -108,6 +108,7 @@ type SyncConfigProvider interface {
type DiffConfigProvider interface {
Args() string
PostRenderer() string
Values() []string
Set() []string

View File

@ -150,6 +150,10 @@ func (a diffConfig) ResetValues() bool {
return !a.reuseValues
}
func (a diffConfig) PostRenderer() string {
return ""
}
func TestDiff(t *testing.T) {
type flags struct {
skipNeeds bool

View File

@ -40,6 +40,8 @@ type DiffOptions struct {
ReuseValues bool
// ResetValues is true if helm command should reset values to charts' default
ResetValues bool
// Propagate '--post-renderer' to helmv3 template and helm install
PostRenderer string
}
// NewDiffOptions creates a new Apply
@ -171,3 +173,8 @@ func (t *DiffImpl) ReuseValues() bool {
func (t *DiffImpl) ResetValues() bool {
return t.DiffOptions.ResetValues
}
// PostRenderer returns the PostRenderer.
func (t *DiffImpl) PostRenderer() string {
return t.DiffOptions.PostRenderer
}

View File

@ -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 {
switch {
// helm.GetPostRenderer() comes from cmd flag.
case helm.GetPostRenderer() != "":
flags = append(flags, "--post-renderer", helm.GetPostRenderer())
case release.PostRenderer != nil && *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 != "":
flags = append(flags, "--post-renderer", *st.HelmDefaults.PostRenderer)
}

View File

@ -82,7 +82,7 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes
. ${dir}/test-cases/secretssops.sh
. ${dir}/test-cases/yaml-overwrite.sh
. ${dir}/test-cases/chart-needs.sh
. ${dir}/test-cases/postrender-diff.sh
. ${dir}/test-cases/postrender.sh
# ALL DONE -----------------------------------------------------------------------------------------------------------

View File

@ -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"

View File

@ -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"

View File

@ -1,6 +1,3 @@
helmDefaults:
postRenderer: ./add-cm1.bash
releases:
- name: foo
chart: ../../../charts/raw

View File

@ -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

View File

@ -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