fix(#507): support assign --post-renderer within helmfile flags and helmdefault or release config

1. only implement post-renderer flags this patch
2. As mumoshu advise, add helmfile flags `--post-render` and add the
   postRenderer  config in helmDefaults and release. the priority is
   helmfile flags > release > helmDefaults.
3. fix the test case in state_test.go and some other tests.

Signed-off-by: guofutan <guofutan@tencent.com>
Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
guofutan
2022-12-13 13:12:07 +08:00
committed by yxxhero
parent 1f0f7ec8d6
commit 0a953731b0
18 changed files with 320 additions and 102 deletions
+14 -23
View File
@@ -36,7 +36,7 @@ type execer struct {
logger *zap.SugaredLogger
kubeContext string
extra []string
postRenderers []string
postRenderer string
decryptedSecretMutex sync.Mutex
decryptedSecrets map[string]*decryptedSecret
writeTempFile func([]byte) (string, error)
@@ -132,23 +132,7 @@ func New(helmBinary string, enableLiveOutput bool, logger *zap.SugaredLogger, ku
}
func (helm *execer) SetExtraArgs(args ...string) {
var extraArgs []string
var renderArgs []string
// reset the postRenderers and filter --post-renderer=xx or --post-renderer xxx from args and put into helm.postRenderers
for i := 0; i < len(args); i++ {
if strings.HasPrefix(args[i], "--post-renderer=") || strings.HasPrefix(args[i], "--post-renderer-args=") {
renderArgs = append(renderArgs, args[i])
} else if (args[i] == "--post-renderer" || args[i] == "--post-renderer-args") && i < len(args)-1 {
renderArgs = append(renderArgs, args[i])
renderArgs = append(renderArgs, args[i+1])
i++
} else {
extraArgs = append(extraArgs, args[i])
}
}
helm.extra = extraArgs
helm.postRenderers = renderArgs
helm.extra = args
}
func (helm *execer) SetHelmBinary(bin string) {
@@ -159,6 +143,14 @@ func (helm *execer) SetEnableLiveOutput(enableLiveOutput bool) {
helm.enableLiveOutput = enableLiveOutput
}
func (helm *execer) SetPostRenderer(postRenderer string) {
helm.postRenderer = postRenderer
}
func (helm *execer) GetPostRenderer() string {
return helm.postRenderer
}
func (helm *execer) AddRepo(name, repository, cafile, certfile, keyfile, username, password string, managed string, passCredentials string, skipTLSVerify string) error {
var args []string
var out []byte
@@ -268,8 +260,8 @@ func (helm *execer) SyncRelease(context HelmContext, name, chart string, flags .
env["HELM_TILLER_HISTORY_MAX"] = strconv.Itoa(context.HistoryMax)
}
if helm.IsHelm3() {
flags = append(flags, helm.postRenderers...)
if helm.IsHelm3() && helm.postRenderer != "" {
flags = append(flags, "--post-renderer", helm.postRenderer)
}
out, err := helm.exec(append(append(preArgs, "upgrade", "--install", name, chart), flags...), env, nil)
@@ -411,10 +403,9 @@ func (helm *execer) TemplateRelease(name string, chart string, flags ...string)
args = []string{"template", chart, "--name", name}
}
if helm.IsHelm3() {
flags = append(flags, helm.postRenderers...)
if helm.IsHelm3() && helm.postRenderer != "" {
flags = append(flags, "--post-renderer", helm.postRenderer)
}
out, err := helm.exec(append(args, flags...), map[string]string{}, nil)
var outputToFile bool
+24 -23
View File
@@ -69,29 +69,6 @@ func Test_SetExtraArgs(t *testing.T) {
if !reflect.DeepEqual(helm.extra, []string{"alpha", "beta"}) {
t.Error("helmexec.SetExtraArgs() - two extra arguments missing (overwriting the previous value)")
}
helm.SetExtraArgs("--post-renderer=aaa")
fmt.Println(helm.postRenderers)
if !reflect.DeepEqual(helm.postRenderers, []string{"--post-renderer=aaa"}) {
t.Error("helmexec.SetExtraArgs() - post-renderer assign arguments missing ")
}
helm.SetExtraArgs("--post-renderer", "aaa")
fmt.Println(helm.postRenderers)
if !reflect.DeepEqual(helm.postRenderers, []string{"--post-renderer", "aaa"}) {
t.Error("helmexec.SetExtraArgs() - post-renderer blank arguments missing ")
}
helm.SetExtraArgs("--post-renderer-args=bbb")
fmt.Println(helm.postRenderers)
if !reflect.DeepEqual(helm.postRenderers, []string{"--post-renderer-args=bbb"}) {
t.Error("helmexec.SetExtraArgs() - post-renderer-args assign arguments missing")
}
helm.SetExtraArgs("--post-renderer", "aaa", "--post-renderer-args=bbb")
if !reflect.DeepEqual(helm.postRenderers, []string{"--post-renderer", "aaa", "--post-renderer-args=bbb"}) {
t.Error("helmexec.SetExtraArgs() - post-renderer arguments not be set correct")
}
}
func Test_SetHelmBinary(t *testing.T) {
@@ -116,6 +93,30 @@ func Test_SetEnableLiveOutput(t *testing.T) {
}
}
func Test_SetPostRenderer(t *testing.T) {
helm := MockExecer(NewLogger(os.Stdout, "info"), "dev")
if helm.enableLiveOutput {
t.Error("helmexec.enableLiveOutput should not be enabled by default")
}
postRendererFoo := "/bin/rewrite-repo.sh"
helm.SetPostRenderer(postRendererFoo)
if helm.postRenderer != postRendererFoo {
t.Errorf("helmexec.SetPostRenderer() - actual = %s expect = %s", helm.postRenderer, postRendererFoo)
}
}
func Test_GetPostRenderer(t *testing.T) {
helm := MockExecer(NewLogger(os.Stdout, "info"), "dev")
if helm.enableLiveOutput {
t.Error("helmexec.enableLiveOutput should not be enabled by default")
}
postRendererFoo := "/bin/rewrite-repo.sh"
helm.SetPostRenderer(postRendererFoo)
if helm.GetPostRenderer() != postRendererFoo {
t.Errorf("helmexec.GetPostRenderer() - actual = %s expect = %s", helm.GetPostRenderer(), postRendererFoo)
}
}
func Test_AddRepo_Helm_3_3_2(t *testing.T) {
var buffer bytes.Buffer
logger := NewLogger(&buffer, "debug")
+2
View File
@@ -14,6 +14,8 @@ type Interface interface {
SetExtraArgs(args ...string)
SetHelmBinary(bin string)
SetEnableLiveOutput(enableLiveOutput bool)
SetPostRenderer(postRenderer string)
GetPostRenderer() string
AddRepo(name, repository, cafile, certfile, keyfile, username, password string, managed string, passCredentials string, skipTLSVerify string) error
UpdateRepo() error