diff --git a/terraform/context_plan_test.go b/terraform/context_plan_test.go index 2c2282d93..9dfddceea 100644 --- a/terraform/context_plan_test.go +++ b/terraform/context_plan_test.go @@ -5947,3 +5947,48 @@ resource "aws_instance" "foo" { t.Errorf("missing %s change for %s", action, res) } } + +func TestContext2Plan_moduleRefIndex(t *testing.T) { + m := testModuleInline(t, map[string]string{ + "main.tf": ` +module "mod" { + for_each = { + a = "thing" + } + in = null + source = "./mod" +} + +module "single" { + source = "./mod" + in = module.mod["a"] +} +`, + "mod/main.tf": ` +variable "in" { +} + +output "out" { + value = "foo" +} + +resource "aws_instance" "foo" { +} +`, + }) + + p := testProvider("aws") + p.DiffFn = testDiffFn + + ctx := testContext2(t, &ContextOpts{ + Config: m, + Providers: map[addrs.Provider]providers.Factory{ + addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p), + }, + }) + + _, diags := ctx.Plan() + if diags.HasErrors() { + t.Fatal(diags.ErrWithWarnings()) + } +} diff --git a/terraform/node_module_variable.go b/terraform/node_module_variable.go index c1ec01e27..e0d007f59 100644 --- a/terraform/node_module_variable.go +++ b/terraform/node_module_variable.go @@ -95,11 +95,7 @@ func (n *nodeExpandModuleVariable) ReferenceOutside() (selfPath, referencePath a // GraphNodeReferenceable func (n *nodeExpandModuleVariable) ReferenceableAddrs() []addrs.Referenceable { - // FIXME: References for module variables probably need to be thought out a bit more - // Otherwise, we can reference the output via the address itself, or the - // module call - _, call := n.Module.Call() - return []addrs.Referenceable{n.Addr, call} + return []addrs.Referenceable{n.Addr} } // RemovableIfNotTargeted diff --git a/terraform/transform_reference.go b/terraform/transform_reference.go index 94659e380..6a0ee98fa 100644 --- a/terraform/transform_reference.go +++ b/terraform/transform_reference.go @@ -303,6 +303,8 @@ func (m ReferenceMap) References(v dag.Vertex) []dag.Vertex { subject = ri.ContainingResource() case addrs.AbsModuleCallOutput: subject = ri.ModuleCallOutput() + case addrs.ModuleCallInstance: + subject = ri.Call default: log.Printf("[WARN] ReferenceTransformer: reference not found: %q", subject) continue