From e4915059e515055340f8136ffdebcaf5c7906c02 Mon Sep 17 00:00:00 2001 From: Maahi B Date: Fri, 29 Apr 2022 15:16:02 +0530 Subject: [PATCH] added code to delete the keys whose values are set to empty --- pkg/util/strvals/strvals.go | 25 ++++++++++- pkg/util/strvals/strvals_test.go | 72 ++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 pkg/util/strvals/strvals_test.go diff --git a/pkg/util/strvals/strvals.go b/pkg/util/strvals/strvals.go index 2a7221f33a..58ac619489 100644 --- a/pkg/util/strvals/strvals.go +++ b/pkg/util/strvals/strvals.go @@ -17,6 +17,7 @@ import ( "bytes" "fmt" "io" + "reflect" "strconv" "strings" @@ -250,7 +251,18 @@ func set(data map[string]interface{}, key string, val interface{}) { if len(key) == 0 { return } - data[key] = val + + rt := reflect.TypeOf(val) + switch rt.Kind() { + case reflect.String: + if len(val.(string)) < 1 { + data[key] = nil + } else { + data[key] = val + } + default: + data[key] = val + } } func setIndex(list []interface{}, index int, val interface{}) (l2 []interface{}, err error) { @@ -271,7 +283,16 @@ func setIndex(list []interface{}, index int, val interface{}) (l2 []interface{}, copy(newlist, list) list = newlist } - list[index] = val + switch reflect.TypeOf(val).Kind() { + case reflect.String: + if len(val.(string)) > 0 { + list[index] = val + } else { + list[index] = nil + } + default: + list[index] = val + } return list, nil } diff --git a/pkg/util/strvals/strvals_test.go b/pkg/util/strvals/strvals_test.go new file mode 100644 index 0000000000..dda94eb7e7 --- /dev/null +++ b/pkg/util/strvals/strvals_test.go @@ -0,0 +1,72 @@ +package strvals + +import ( + "encoding/json" + "fmt" + "github.com/pkg/errors" + "gotest.tools/assert" + "log" + "testing" +) + +func TestSetStringFlag(t *testing.T) { + rawConfig := getActualRawConfig() + s := "deployments.dev.helm.values.containers[0]=" + err := ParseIntoString(s, rawConfig) + if err != nil { + fmt.Println(errors.Wrap(err, "parsing --set-string flag")) + log.Fatal(err) + } + b, err := json.Marshal(rawConfig) + if err != nil { + fmt.Println(err) + } + fmt.Println("output : " + string(b)) + assert.DeepEqual(t, rawConfig, getExpectedRawConfigForSetString()) +} + +func TestSetFlag(t *testing.T) { + s := "deployments.dev.helm.values.containers[1].image=" + rawConfig := getActualRawConfig() + err := ParseInto(s, rawConfig) + if err != nil { + fmt.Println(errors.Wrap(err, "parsing --set flag")) + log.Fatal(err) + } + b, err := json.Marshal(rawConfig) + if err != nil { + fmt.Println(err) + } + fmt.Println("output : " + string(b)) + assert.DeepEqual(t, rawConfig, getExpectedRawConfigForSet()) +} + +func getExpectedRawConfigForSet() map[string]interface{} { + jsonStr := "{\"deployments\":{\"dev\":{\"helm\":{\"values\":{\"containers\":[{\"image\":\"alpine\"},{\"image\":null}]}}}},\"name\":\"run-pipelines-demo\",\"pipelines\":{\"deploy\":\"create_deployments --all\",\"dev\":\"run_pipelines deploy --set deployments.dev.helm.values.containers[0].image=nginx --set-string deployments.dev.helm.values.containers[0].name=mynginx\"},\"version\":\"v2beta1\"}" + rawConfig := map[string]interface{}{} + err := json.Unmarshal([]byte(jsonStr), &rawConfig) + if err != nil { + fmt.Println(err) + } + return rawConfig +} + +func getExpectedRawConfigForSetString() map[string]interface{} { + jsonStr := "{\"deployments\":{\"dev\":{\"helm\":{\"values\":{\"containers\":[null,{\"image\":\"ns\"}]}}}},\"name\":\"run-pipelines-demo\",\"pipelines\":{\"deploy\":\"create_deployments --all\",\"dev\":\"run_pipelines deploy --set deployments.dev.helm.values.containers[0].image=nginx --set-string deployments.dev.helm.values.containers[0].name=mynginx\"},\"version\":\"v2beta1\"}" + rawConfig := map[string]interface{}{} + err := json.Unmarshal([]byte(jsonStr), &rawConfig) + if err != nil { + fmt.Println(err) + } + return rawConfig +} + +func getActualRawConfig() map[string]interface{} { + jsonStr := "{\n \"deployments\": {\n \"dev\": { \"helm\": { \"values\": { \"containers\": [{ \"image\": \"alpine\" },{ \"image\": \"ns\" }] } } }\n },\n \"name\": \"run-pipelines-demo\",\n \"pipelines\": {\n \"deploy\": \"create_deployments --all\",\n \"dev\": \"run_pipelines deploy --set deployments.dev.helm.values.containers[0].image=nginx --set-string deployments.dev.helm.values.containers[0].name=mynginx\"\n },\n \"version\": \"v2beta1\"\n}\n" + rawConfig := map[string]interface{}{} + err := json.Unmarshal([]byte(jsonStr), &rawConfig) + if err != nil { + fmt.Println(err) + } + return rawConfig +}