From e22f946415f25034508a078a2f4c1ce1e94651fa Mon Sep 17 00:00:00 2001 From: Daniel Beal <50845286+dbeal-wiser@users.noreply.github.com> Date: Fri, 24 Jan 2020 10:34:53 -0800 Subject: [PATCH] fix: Jsonnet TLA parameters of same type are overwritten (#3022) * TLA parameters of same time are overwritten When updating an application deployed with existing TLAs using the following command: ``` argocd app set m2-jsonnet --jsonnet-tla-code "myTLAVar={hello:'world'}" ``` The all the TLAs of type code will be cleared and not preserved as would be expected of a set. The only TLA remaining is `myTLAVar`. This will set the behavior of TLAs to match that of extVars Signed-off-by: Daniel Beal * revert gopkg.lock * add unit tests * fix go formatting --- cmd/argocd/commands/app.go | 27 ++------------------------- cmd/argocd/commands/app_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 62e2b369aa..53fc15d821 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -621,31 +621,8 @@ func setJsonnetOpt(src *argoappv1.ApplicationSource, tlaParameters []string, cod if src.Directory == nil { src.Directory = &argoappv1.ApplicationSourceDirectory{} } - - if len(tlaParameters) != 0 { - tlas := make([]argoappv1.JsonnetVar, len(tlaParameters)) - for index, paramStr := range tlaParameters { - parts := strings.SplitN(paramStr, "=", 2) - if len(parts) != 2 { - log.Fatalf("Expected parameter of the form: param=value. Received: %s", paramStr) - break - } - tlas[index] = argoappv1.JsonnetVar{ - Name: parts[0], - Value: parts[1], - Code: code} - } - var existingTLAs []argoappv1.JsonnetVar - for i := range src.Directory.Jsonnet.TLAs { - if src.Directory.Jsonnet.TLAs[i].Code != code { - existingTLAs = append(existingTLAs, src.Directory.Jsonnet.TLAs[i]) - } - } - src.Directory.Jsonnet.TLAs = append(existingTLAs, tlas...) - } - - if src.Directory.IsZero() { - src.Directory = nil + for _, j := range tlaParameters { + src.Directory.Jsonnet.TLAs = append(src.Directory.Jsonnet.TLAs, argoappv1.NewJsonnetVar(j, code)) } } diff --git a/cmd/argocd/commands/app_test.go b/cmd/argocd/commands/app_test.go index a44d4e24f8..a967561754 100644 --- a/cmd/argocd/commands/app_test.go +++ b/cmd/argocd/commands/app_test.go @@ -35,3 +35,20 @@ func Test_setHelmOpt(t *testing.T) { assert.Equal(t, []v1alpha1.HelmParameter{{Name: "foo", Value: "bar", ForceString: true}}, src.Helm.Parameters) }) } + +func Test_setJsonnetOpt(t *testing.T) { + t.Run("TlaSets", func(t *testing.T) { + src := v1alpha1.ApplicationSource{} + setJsonnetOpt(&src, []string{"foo=bar"}, false) + assert.Equal(t, []v1alpha1.JsonnetVar{{Name: "foo", Value: "bar"}}, src.Directory.Jsonnet.TLAs) + setJsonnetOpt(&src, []string{"bar=baz"}, false) + assert.Equal(t, []v1alpha1.JsonnetVar{{Name: "foo", Value: "bar"}, {Name: "bar", Value: "baz"}}, src.Directory.Jsonnet.TLAs) + }) + t.Run("ExtSets", func(t *testing.T) { + src := v1alpha1.ApplicationSource{} + setJsonnetOptExtVar(&src, []string{"foo=bar"}, false) + assert.Equal(t, []v1alpha1.JsonnetVar{{Name: "foo", Value: "bar"}}, src.Directory.Jsonnet.ExtVars) + setJsonnetOptExtVar(&src, []string{"bar=baz"}, false) + assert.Equal(t, []v1alpha1.JsonnetVar{{Name: "foo", Value: "bar"}, {Name: "bar", Value: "baz"}}, src.Directory.Jsonnet.ExtVars) + }) +}