Commit c62ff7ea authored by Michelle Noorali's avatar Michelle Noorali

fix(helm): correctly convert types on --set flag

fixes #1449
parent 58be8c9f
...@@ -24,6 +24,7 @@ import ( ...@@ -24,6 +24,7 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
"text/template" "text/template"
...@@ -285,12 +286,32 @@ func (v *values) Set(data string) error { ...@@ -285,12 +286,32 @@ func (v *values) Set(data string) error {
return nil return nil
} }
func typedVal(val string) interface{} {
if strings.EqualFold(val, "true") {
return true
}
if strings.EqualFold(val, "false") {
return false
}
if iv, err := strconv.ParseInt(val, 10, 64); err == nil {
return iv
}
if fv, err := strconv.ParseFloat(val, 64); err == nil {
return fv
}
return val
}
func splitPair(item string) (name string, value interface{}) { func splitPair(item string) (name string, value interface{}) {
pair := strings.SplitN(item, "=", 2) pair := strings.SplitN(item, "=", 2)
if len(pair) == 1 { if len(pair) == 1 {
return pair[0], true return pair[0], true
} }
return pair[0], pair[1] return pair[0], typedVal(pair[1])
} }
// locateChartPath looks for a chart directory in known places, and returns either the full path or an error. // locateChartPath looks for a chart directory in known places, and returns either the full path or an error.
......
...@@ -100,7 +100,7 @@ func TestInstall(t *testing.T) { ...@@ -100,7 +100,7 @@ func TestInstall(t *testing.T) {
} }
func TestValues(t *testing.T) { func TestValues(t *testing.T) {
args := "sailor=sinbad,good,port.source=baghdad,port.destination=basrah" args := "sailor=sinbad,good,port.source=baghdad,port.destination=basrah,success=True"
vobj := new(values) vobj := new(values)
vobj.Set(args) vobj.Set(args)
...@@ -113,6 +113,10 @@ func TestValues(t *testing.T) { ...@@ -113,6 +113,10 @@ func TestValues(t *testing.T) {
t.Errorf("Expected good to be true. Got %v", vals["good"]) t.Errorf("Expected good to be true. Got %v", vals["good"])
} }
if !vals["success"].(bool) {
t.Errorf("Expected boolean true. Got %T, %v", vals["success"], vals["success"])
}
port := vals["port"].(map[string]interface{}) port := vals["port"].(map[string]interface{})
if fmt.Sprint(port["source"]) != "baghdad" { if fmt.Sprint(port["source"]) != "baghdad" {
...@@ -127,6 +131,7 @@ port: ...@@ -127,6 +131,7 @@ port:
destination: basrah destination: basrah
source: baghdad source: baghdad
sailor: sinbad sailor: sinbad
success: true
` `
out, err := vobj.yaml() out, err := vobj.yaml()
if err != nil { if err != nil {
...@@ -147,6 +152,7 @@ port: ...@@ -147,6 +152,7 @@ port:
destination: basrah destination: basrah
source: baghdad source: baghdad
sailor: pisti sailor: pisti
success: true
` `
newOut, err := vobj.yaml() newOut, err := vobj.yaml()
if err != nil { if err != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment