diff --git a/config/config.go b/config/config.go index 7469052a9753..99295ab8f8e3 100644 --- a/config/config.go +++ b/config/config.go @@ -379,6 +379,17 @@ func (c *Config) Validate() error { // Verify depends on points to resources that all exist for _, d := range r.DependsOn { + // Check if we contain interpolations + rc, err := NewRawConfig(map[string]interface{}{ + "value": d, + }) + if err == nil && len(rc.Variables) > 0 { + errs = append(errs, fmt.Errorf( + "%s: depends on value cannot contain interpolations: %s", + n, d)) + continue + } + if _, ok := resources[d]; !ok { errs = append(errs, fmt.Errorf( "%s: resource depends on non-existent resource '%s'", diff --git a/config/config_test.go b/config/config_test.go index d49d9cdac899..821539ccf842 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -109,6 +109,13 @@ func TestConfigValidate_countVarInvalid(t *testing.T) { } } +func TestConfigValidate_dependsOnVar(t *testing.T) { + c := testConfig(t, "validate-depends-on-var") + if err := c.Validate(); err == nil { + t.Fatal("should not be valid") + } +} + func TestConfigValidate_dupModule(t *testing.T) { c := testConfig(t, "validate-dup-module") if err := c.Validate(); err == nil { diff --git a/config/test-fixtures/validate-depends-on-var/main.tf b/config/test-fixtures/validate-depends-on-var/main.tf new file mode 100644 index 000000000000..482a04f315c3 --- /dev/null +++ b/config/test-fixtures/validate-depends-on-var/main.tf @@ -0,0 +1,7 @@ +variable "foo" { + description = "bar" +} + +resource aws_instance "web" { + depends_on = ["${var.foo}"] +}