providers/template: template_file supports floating point math

This commit is contained in:
Mitchell Hashimoto 2016-08-31 17:25:11 -07:00
parent 6d4bc5547e
commit c6ad7f80e8
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
2 changed files with 16 additions and 2 deletions

View File

@ -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,
}
}

View File

@ -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 {