From 4cb1ea6ae1a8baad838d7665addc97a2f047538e Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 11 Oct 2014 17:20:39 -0700 Subject: [PATCH] config: allow exact multi-resource references outside slices --- config/config.go | 2 +- config/config_test.go | 7 +++++++ .../validate-var-multi-exact-non-slice/main.tf | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 config/test-fixtures/validate-var-multi-exact-non-slice/main.tf diff --git a/config/config.go b/config/config.go index 2def8c842e..261c9c4ac1 100644 --- a/config/config.go +++ b/config/config.go @@ -455,7 +455,7 @@ func (c *Config) validateVarContextFn( return } - if rv.Multi && loc != reflectwalk.SliceElem { + if rv.Multi && rv.Index == -1 && loc != reflectwalk.SliceElem { *errs = append(*errs, fmt.Errorf( "%s: multi-variable must be in a slice", source)) } diff --git a/config/config_test.go b/config/config_test.go index b3721493dc..1574ba83ac 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -221,6 +221,13 @@ func TestConfigValidate_varDefaultInterpolate(t *testing.T) { } } +func TestConfigValidate_varMultiExactNonSlice(t *testing.T) { + c := testConfig(t, "validate-var-multi-exact-non-slice") + if err := c.Validate(); err != nil { + t.Fatalf("should be valid: %s", err) + } +} + func TestConfigValidate_varMultiNonSlice(t *testing.T) { c := testConfig(t, "validate-var-multi-non-slice") if err := c.Validate(); err == nil { diff --git a/config/test-fixtures/validate-var-multi-exact-non-slice/main.tf b/config/test-fixtures/validate-var-multi-exact-non-slice/main.tf new file mode 100644 index 0000000000..e79311382b --- /dev/null +++ b/config/test-fixtures/validate-var-multi-exact-non-slice/main.tf @@ -0,0 +1,7 @@ +resource "aws_instance" "foo" { + count = 3 +} + +resource "aws_instance" "bar" { + foo = "${aws_instance.foo.0.id}" +}