From 35016a5ea32f5f05a30e09905c0bfcde07cc54bd Mon Sep 17 00:00:00 2001 From: Pam Selle <204372+pselle@users.noreply.github.com> Date: Wed, 28 Aug 2019 14:02:11 -0400 Subject: [PATCH] Move things around, add test for resource references --- terraform/eval_for_each.go | 7 ++++++- terraform/terraform_test.go | 20 ++++++++++++++++++- .../plan-for-each-unknown-value/main.tf | 9 +++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/terraform/eval_for_each.go b/terraform/eval_for_each.go index 23ba388b5..1db1c3fad 100644 --- a/terraform/eval_for_each.go +++ b/terraform/eval_for_each.go @@ -50,7 +50,7 @@ func evaluateResourceForEachExpressionKnown(expr hcl.Expression, ctx EvalContext Subject: expr.Range().Ptr(), }) return nil, true, diags - case !forEachVal.IsWhollyKnown(): + case !forEachVal.IsKnown(): return map[string]cty.Value{}, false, diags } @@ -74,6 +74,11 @@ func evaluateResourceForEachExpressionKnown(expr hcl.Expression, ctx EvalContext }) return nil, true, diags } + + // For sets, we need to recursively check ...and add reasoning why this works here + if !forEachVal.IsWhollyKnown() { + return map[string]cty.Value{}, false, diags + } } // If the map is empty ({}), return an empty map, because cty will return nil when representing {} AsValueMap diff --git a/terraform/terraform_test.go b/terraform/terraform_test.go index 3a9d88c0b..0d8cc0900 100644 --- a/terraform/terraform_test.go +++ b/terraform/terraform_test.go @@ -553,7 +553,25 @@ aws_instance.foo["e30a7edcc42a846684f2a4eea5f3cd261d33c46d"]: ID = foo provider = provider.aws foo = foo - type = aws_instance` + type = aws_instance +aws_instance.one["a"]: + ID = foo + provider = provider.aws +aws_instance.one["b"]: + ID = foo + provider = provider.aws +aws_instance.two["a"]: + ID = foo + provider = provider.aws + + Dependencies: + aws_instance.one +aws_instance.two["b"]: + ID = foo + provider = provider.aws + + Dependencies: + aws_instance.one` const testTerraformApplyMinimalStr = ` aws_instance.bar: ID = foo diff --git a/terraform/testdata/plan-for-each-unknown-value/main.tf b/terraform/testdata/plan-for-each-unknown-value/main.tf index 2b26dbd1f..933ed5f4c 100644 --- a/terraform/testdata/plan-for-each-unknown-value/main.tf +++ b/terraform/testdata/plan-for-each-unknown-value/main.tf @@ -9,3 +9,12 @@ resource "aws_instance" "foo" { ) foo = "foo" } + +# referencing another resource, which means it has some unknown values in it +resource "aws_instance" "one" { + for_each = toset(["a", "b"]) +} + +resource "aws_instance" "two" { + for_each = aws_instance.one +}