diff --git a/config/interpolate.go b/config/interpolate.go index a12fd11d5..bb526bf6a 100644 --- a/config/interpolate.go +++ b/config/interpolate.go @@ -282,6 +282,10 @@ func NewUserVariable(key string) (*UserVariable, error) { name = name[:idx] } + if len(elem) > 0 { + return nil, fmt.Errorf("Invalid dot index found: 'var.%s.%s'. Values in maps and lists can be referenced using square bracket indexing, like: 'var.mymap[\"key\"]' or 'var.mylist[1]'.", name, elem) + } + return &UserVariable{ key: key, diff --git a/config/interpolate_test.go b/config/interpolate_test.go index dc9d16b05..ac28ad0fb 100644 --- a/config/interpolate_test.go +++ b/config/interpolate_test.go @@ -2,6 +2,7 @@ package config import ( "reflect" + "strings" "testing" "github.com/hashicorp/hil" @@ -143,20 +144,10 @@ func TestNewUserVariable(t *testing.T) { } } -func TestNewUserVariable_map(t *testing.T) { - v, err := NewUserVariable("var.bar.baz") - if err != nil { - t.Fatalf("err: %s", err) - } - - if v.Name != "bar" { - t.Fatalf("bad: %#v", v.Name) - } - if v.Elem != "baz" { - t.Fatalf("bad: %#v", v.Elem) - } - if v.FullKey() != "var.bar.baz" { - t.Fatalf("bad: %#v", v) +func TestNewUserVariable_oldMapDotIndexErr(t *testing.T) { + _, err := NewUserVariable("var.bar.baz") + if err == nil || !strings.Contains(err.Error(), "Invalid dot index") { + t.Fatalf("Expected dot index err, got: %#v", err) } } diff --git a/config/test-fixtures/validate-good/main.tf b/config/test-fixtures/validate-good/main.tf index 4af1f8dd6..89e14bfbe 100644 --- a/config/test-fixtures/validate-good/main.tf +++ b/config/test-fixtures/validate-good/main.tf @@ -22,7 +22,7 @@ resource "aws_security_group" "firewall" { } resource aws_instance "web" { - ami = "${var.amis.east}" + ami = "${var.amis["east"]}" security_groups = [ "foo", "${aws_security_group.firewall.foo}"