Merge pull request #12245 from hashicorp/jbardin/hcl-encode

Always quote identifiers when encoding HCL
This commit is contained in:
James Bardin 2017-02-24 19:00:17 -05:00 committed by GitHub
commit 6e9e610f51
3 changed files with 55 additions and 2 deletions

View File

@ -94,7 +94,7 @@ func (e *encodeState) encodeMap(m map[string]interface{}) error {
for i, k := range sortedKeys(m) {
v := m[k]
e.WriteString(k + " = ")
e.WriteString(fmt.Sprintf("%q = ", k))
err := e.encode(v)
if err != nil {
return err

View File

@ -0,0 +1,52 @@
package command
import "testing"
// The command package has it's own HCL encoder to encode variables to push.
// Make sure the variable we encode parse correctly
func TestHCLEncoder_parse(t *testing.T) {
cases := []struct {
Name string
Val interface{}
Error bool
}{
{
Name: "int",
Val: 12345,
},
{
Name: "float",
Val: 1.2345,
},
{
Name: "string",
Val: "terraform",
},
{
Name: "list",
Val: []interface{}{"a", "b", "c"},
},
{
Name: "map",
Val: map[string]interface{}{
"a": 1,
},
},
// a numeric looking identifier requires quotes
{
Name: "map_with_quoted_key",
Val: map[string]interface{}{
"0.0.0.0/24": "mask",
},
},
}
for _, c := range cases {
t.Run(c.Name, func(t *testing.T) {
_, err := encodeHCL(c.Val)
if err != nil {
t.Fatal(err)
}
})
}
}

View File

@ -761,11 +761,12 @@ func testArchiveStr(t *testing.T, path string) []string {
return result
}
// we always quote map keys to be safe
func pushTFVars() []atlas.TFVar {
return []atlas.TFVar{
{Key: "bar", Value: "foo", IsHCL: false},
{Key: "baz", Value: `{
A = "a"
"A" = "a"
}`, IsHCL: true},
{Key: "fob", Value: `["a", "quotes \"in\" quotes"]`, IsHCL: true},
{Key: "foo", Value: "bar", IsHCL: false},