diff --git a/builtin/providers/template/datasource_template_file.go b/builtin/providers/template/datasource_template_file.go index 6a04ccfca..ed5aa3517 100644 --- a/builtin/providers/template/datasource_template_file.go +++ b/builtin/providers/template/datasource_template_file.go @@ -6,6 +6,7 @@ import ( "fmt" "os" "path/filepath" + "strconv" "strings" "github.com/hashicorp/hil" @@ -116,9 +117,20 @@ func execute(s string, vars map[string]interface{}) (string, error) { if !ok { return "", fmt.Errorf("unexpected type for variable %q: %T", k, v) } + + // Store the defaults (string and value) + var val interface{} = s + typ := ast.TypeString + + // If we can parse a float, then use that + if v, err := strconv.ParseFloat(s, 64); err == nil { + val = v + typ = ast.TypeFloat + } + varmap[k] = ast.Variable{ - Value: s, - Type: ast.TypeString, + Value: val, + Type: typ, } } diff --git a/builtin/providers/template/datasource_template_file_test.go b/builtin/providers/template/datasource_template_file_test.go index 43dda582c..f213cb5ba 100644 --- a/builtin/providers/template/datasource_template_file_test.go +++ b/builtin/providers/template/datasource_template_file_test.go @@ -26,6 +26,8 @@ func TestTemplateRendering(t *testing.T) { {`{a="foo"}`, `$${a}`, `foo`}, {`{a="hello"}`, `$${replace(a, "ello", "i")}`, `hi`}, {`{}`, `${1+2+3}`, `6`}, + {`{a=1, b=2}`, `$${a+b}`, `3`}, + {`{a=0.1, b=0.2}`, `$${0+((a+b)*10)}`, `3`}, } for _, tt := range cases {