diff --git a/cmd/helm/init.go b/cmd/helm/init.go index fe5b40cc0..f75402a06 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 110706f11..122bd9614 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{