From c1ddde94bbe5288ad5d1309a3b33cb19d41492c1 Mon Sep 17 00:00:00 2001 From: Justin Scott Date: Tue, 20 Jun 2017 16:23:38 -0700 Subject: [PATCH] Update parseNodeSelectors (renamed parseNodeSelectorsInto) to mutate map in place. Update init json output to use buffers instead of slice append. --- cmd/helm/init.go | 8 +++++--- cmd/helm/installer/install.go | 14 +++++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cmd/helm/init.go b/cmd/helm/init.go index aaafae8fd..35b5bda6c 100644 --- a/cmd/helm/init.go +++ b/cmd/helm/init.go @@ -203,9 +203,11 @@ func (i *initCmd) run() error { if err != nil { return err } - tm := []byte("{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Deployment\",") - j := append(tm, jsonb[1:]...) - if err := json.Indent(&out, j, "", " "); err != nil { + const tm = `{"apiVersion":"extensions/v1beta1","kind":"Deployment",` + buf := bytes.NewBuffer(make([]byte, 0, len(tm)+len(jsonb)-1)) + buf.WriteString(tm) + buf.Write(jsonb[1:]) + if err := json.Indent(&out, buf.Bytes(), "", " "); err != nil { return err } if _, err = i.out.Write(out.Bytes()); err != nil { diff --git a/cmd/helm/installer/install.go b/cmd/helm/installer/install.go index e797cfeea..ba0cdd5d8 100644 --- a/cmd/helm/installer/install.go +++ b/cmd/helm/installer/install.go @@ -128,24 +128,28 @@ func generateLabels(labels map[string]string) map[string]string { return labels } -// parseNodeSelectors takes a comma delimited list of key=values pairs and returns a map -func parseNodeSelectors(labels string, m map[string]string) map[string]string { +// parseNodeSelectors parses a comma delimited list of key=values pairs into a map +func parseNodeSelectorsInto(labels string, m map[string]string) error { kv := strings.Split(labels, ",") for _, v := range kv { el := strings.Split(v, "=") if len(el) == 2 { m[el[0]] = el[1] + } else { + return fmt.Errorf("Invalid nodeSelector label: %s", kv) } } - - return m + return nil } func generateDeployment(opts *Options) (*v1beta1.Deployment, error) { labels := generateLabels(map[string]string{"name": "tiller"}) nodeSelectors := map[string]string{} nodeSelectors["beta.kubernetes.io/os"] = "linux" if len(opts.NodeSelectors) > 0 { - nodeSelectors = parseNodeSelectors(opts.NodeSelectors, nodeSelectors) + err := parseNodeSelectorsInto(opts.NodeSelectors, nodeSelectors) + if err != nil { + return nil, err + } } d := &v1beta1.Deployment{ ObjectMeta: metav1.ObjectMeta{