diff --git a/terraform/context.go b/terraform/context.go index 8ae8b7e685..1fa33a45ad 100644 --- a/terraform/context.go +++ b/terraform/context.go @@ -889,6 +889,11 @@ func (c *walkContext) genericWalkFn(cb genericWalkFunc) depgraph.WalkFunc { for k, v := range rc.Config { wc.Variables[k] = v.(string) } + for k, _ := range rc.Raw { + if _, ok := wc.Variables[k]; !ok { + wc.Variables[k] = config.UnknownVariableValue + } + } } return wc.Walk() diff --git a/terraform/context_test.go b/terraform/context_test.go index 6ee02a3b9a..4b6bfbfc70 100644 --- a/terraform/context_test.go +++ b/terraform/context_test.go @@ -1474,6 +1474,29 @@ func TestContextPlan_moduleInput(t *testing.T) { } } +func TestContextPlan_moduleInputComputed(t *testing.T) { + m := testModule(t, "plan-module-input-computed") + p := testProvider("aws") + p.DiffFn = testDiffFn + ctx := testContext(t, &ContextOpts{ + Module: m, + Providers: map[string]ResourceProviderFactory{ + "aws": testProviderFuncFixed(p), + }, + }) + + plan, err := ctx.Plan(nil) + if err != nil { + t.Fatalf("err: %s", err) + } + + actual := strings.TrimSpace(plan.String()) + expected := strings.TrimSpace(testTerraformPlanModuleInputComputedStr) + if actual != expected { + t.Fatalf("bad:\n%s", actual) + } +} + func TestContextPlan_moduleInputFromVar(t *testing.T) { m := testModule(t, "plan-module-input-var") p := testProvider("aws") diff --git a/terraform/terraform_test.go b/terraform/terraform_test.go index 3914e478fa..75e5d3475f 100644 --- a/terraform/terraform_test.go +++ b/terraform/terraform_test.go @@ -528,6 +528,23 @@ STATE: ` +const testTerraformPlanModuleInputComputedStr = ` +DIFF: + +CREATE: aws_instance.bar + foo: "" => "" + type: "" => "aws_instance" + +module.child: + CREATE: aws_instance.foo + foo: "" => "" + type: "" => "aws_instance" + +STATE: + + +` + const testTerraformPlanModuleInputVarStr = ` DIFF: diff --git a/terraform/test-fixtures/plan-module-input-computed/child/main.tf b/terraform/test-fixtures/plan-module-input-computed/child/main.tf new file mode 100644 index 0000000000..c1a00c5a32 --- /dev/null +++ b/terraform/test-fixtures/plan-module-input-computed/child/main.tf @@ -0,0 +1,5 @@ +variable "input" {} + +resource "aws_instance" "foo" { + foo = "${var.input}" +} diff --git a/terraform/test-fixtures/plan-module-input-computed/main.tf b/terraform/test-fixtures/plan-module-input-computed/main.tf new file mode 100644 index 0000000000..3a0576434f --- /dev/null +++ b/terraform/test-fixtures/plan-module-input-computed/main.tf @@ -0,0 +1,8 @@ +module "child" { + input = "${aws_instance.bar.foo}" + source = "./child" +} + +resource "aws_instance" "bar" { + compute = "foo" +}