From 1f0f7ec8d618af19f3c0ea5797228a1cf27ea0f4 Mon Sep 17 00:00:00 2001 From: guofutan Date: Mon, 14 Nov 2022 12:05:58 +0800 Subject: [PATCH] fix(#510): fea add postRenderer and postRendererArgs config in helmDefault of helmfile.yaml Signed-off-by: guofutan Signed-off-by: yxxhero --- pkg/argparser/args.go | 7 +++++++ pkg/argparser/args_test.go | 40 ++++++++++++++++++++++++++++++++++++++ pkg/state/state.go | 12 +++++++----- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/pkg/argparser/args.go b/pkg/argparser/args.go index f2fc36e6..1b3fc8ef 100644 --- a/pkg/argparser/args.go +++ b/pkg/argparser/args.go @@ -112,6 +112,13 @@ func GetArgs(args string, state *state.HelmState) []string { } } + if len(state.HelmDefaults.PostRenderer) > 0 { + argArr = append(argArr, fmt.Sprintf("--post-renderer=\"%s\"", state.HelmDefaults.PostRenderer)) + } + for _, arg := range state.HelmDefaults.PostRendererArgs { + argArr = append(argArr, fmt.Sprintf("--post-renderer-args=\"%s\"", arg)) + } + state.HelmDefaults.Args = argArr return state.HelmDefaults.Args diff --git a/pkg/argparser/args_test.go b/pkg/argparser/args_test.go index ed7b7482..01e1987e 100644 --- a/pkg/argparser/args_test.go +++ b/pkg/argparser/args_test.go @@ -35,6 +35,14 @@ func TestGetArgs(t *testing.T) { defaultArgs: []string{"--recreate-pods", "--force"}, expected: "--timeout=3600 --set app1.bootstrap=true --set app2.bootstrap=false,app3.bootstrap=true --tiller-namespace ns --recreate-pods --force", }, + { + args: "--post-renderer=aaa --post-renderer-args=bbb", + expected: "--post-renderer=aaa --post-renderer-args=bbb", + }, + { + args: "--post-renderer aaa --post-renderer-args bbb", + expected: "--post-renderer aaa --post-renderer-args bbb", + }, } for _, test := range tests { Helmdefaults := state.HelmSpec{KubeContext: "test", TillerNamespace: "test-namespace", Args: test.defaultArgs} @@ -49,6 +57,38 @@ func TestGetArgs(t *testing.T) { } } +func TestGetArgs_PostRenderer(t *testing.T) { + tests := []struct { + postRenderer string + PostRendererArgs []string + expected string + }{ + { + postRenderer: "sed", + PostRendererArgs: []string{"-i", "s/aaa/bb/g"}, + expected: "--post-renderer=\"sed\" --post-renderer-args=\"-i\" --post-renderer-args=\"s/aaa/bb/g\"", + }, + + { + postRenderer: "sed", + PostRendererArgs: []string{"-i", "s/aa a/b b/g"}, + expected: "--post-renderer=\"sed\" --post-renderer-args=\"-i\" --post-renderer-args=\"s/aa a/b b/g\"", + }, + } + + for _, test := range tests { + Helmdefaults := state.HelmSpec{KubeContext: "test", TillerNamespace: "test-namespace", PostRenderer: test.postRenderer, PostRendererArgs: test.PostRendererArgs} + testState := &state.HelmState{ + ReleaseSetSpec: state.ReleaseSetSpec{ + HelmDefaults: Helmdefaults, + }, + } + receivedArgs := GetArgs("", testState) + + require.Equalf(t, test.expected, strings.Join(receivedArgs, " "), "expected args %s, received args %s", test.expected, strings.Join(receivedArgs, " ")) + } +} + // TestIsNewFlag tests the isNewFlag function func TestIsNewFlag(t *testing.T) { tests := []struct { diff --git a/pkg/state/state.go b/pkg/state/state.go index 578e639d..5f13c8ee 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -121,11 +121,13 @@ type SubhelmfileEnvironmentSpec struct { // HelmSpec to defines helmDefault values type HelmSpec struct { - KubeContext string `yaml:"kubeContext,omitempty"` - TillerNamespace string `yaml:"tillerNamespace,omitempty"` - Tillerless bool `yaml:"tillerless"` - Args []string `yaml:"args,omitempty"` - Verify bool `yaml:"verify"` + KubeContext string `yaml:"kubeContext,omitempty"` + TillerNamespace string `yaml:"tillerNamespace,omitempty"` + Tillerless bool `yaml:"tillerless"` + Args []string `yaml:"args,omitempty"` + PostRenderer string `yaml:"postRenderer,omitempty"` + PostRendererArgs []string `yaml:"postRendererArgs,omitempty"` + Verify bool `yaml:"verify"` // Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0' Devel bool `yaml:"devel"` // Wait, if set to true, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment are in a ready state before marking the release as successful