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