From 5e79ddf7c662b4bb8083dfce6af8a80539b0da6a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 3 Jul 2014 20:41:26 -0700 Subject: [PATCH] config: detect variables in form of resource.name.*.blah --- config/loader_test.go | 4 ++++ config/test-fixtures/basic.tf | 4 ++++ config/variable.go | 2 +- config/variable_test.go | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/config/loader_test.go b/config/loader_test.go index 4a9a6f939..b9340d3a0 100644 --- a/config/loader_test.go +++ b/config/loader_test.go @@ -238,6 +238,10 @@ aws_instance[web] (x1) vars resource: aws_security_group.firewall.foo user: var.foo +aws_instance[db] (x1) + security_groups + vars + resource: aws_security_group.firewall.*.id ` const basicVariablesStr = ` diff --git a/config/test-fixtures/basic.tf b/config/test-fixtures/basic.tf index f389b1bf0..07aa5ff95 100644 --- a/config/test-fixtures/basic.tf +++ b/config/test-fixtures/basic.tf @@ -28,3 +28,7 @@ resource aws_instance "web" { description = "Main network interface" } } + +resource "aws_instance" "db" { + security_groups = "${aws_security_group.firewall.*.id}" +} diff --git a/config/variable.go b/config/variable.go index 841981a39..40a3b28df 100644 --- a/config/variable.go +++ b/config/variable.go @@ -13,7 +13,7 @@ import ( var varRegexp *regexp.Regexp func init() { - varRegexp = regexp.MustCompile(`(?i)(\$+)\{([-.a-z0-9_]+)\}`) + varRegexp = regexp.MustCompile(`(?i)(\$+)\{([*-.a-z0-9_]+)\}`) } // ReplaceVariables takes a configuration and a mapping of variables diff --git a/config/variable_test.go b/config/variable_test.go index 88fdb23e1..7e3b5fc11 100644 --- a/config/variable_test.go +++ b/config/variable_test.go @@ -87,6 +87,22 @@ func TestVariableDetectWalker_resource(t *testing.T) { } } +func TestVariableDetectWalker_resourceMulti(t *testing.T) { + w := new(variableDetectWalker) + + str := `foo ${ec2.foo.*.bar}` + if err := w.Primitive(reflect.ValueOf(str)); err != nil { + t.Fatalf("err: %s", err) + } + + if len(w.Variables) != 1 { + t.Fatalf("bad: %#v", w.Variables) + } + if w.Variables["ec2.foo.*.bar"].(*ResourceVariable).FullKey() != "ec2.foo.*.bar" { + t.Fatalf("bad: %#v", w.Variables) + } +} + func TestVariableDetectWalker_bad(t *testing.T) { w := new(variableDetectWalker)