From 5c401bead964e9235a0d87087bfb4b4f9c4fdb8e Mon Sep 17 00:00:00 2001 From: James Bardin Date: Wed, 20 May 2020 13:17:31 -0400 Subject: [PATCH] nodeCloseModule needs GraphNodeReferenceOutside The ModulePath method was incorrect, and standing in for GraphNodeReferenceOutside. Add ReferenceOutside so we can fix ModulePath. --- terraform/node_module_expand.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/terraform/node_module_expand.go b/terraform/node_module_expand.go index dac3b9085..7f9f3c3b9 100644 --- a/terraform/node_module_expand.go +++ b/terraform/node_module_expand.go @@ -133,14 +133,19 @@ type nodeCloseModule struct { } var ( - _ graphNodeModuleCloser = (*nodeCloseModule)(nil) - _ GraphNodeReferenceable = (*nodeCloseModule)(nil) + _ graphNodeModuleCloser = (*nodeCloseModule)(nil) + _ GraphNodeReferenceable = (*nodeCloseModule)(nil) + _ GraphNodeReferenceOutside = (*nodeCloseModule)(nil) ) func (n *nodeCloseModule) ModulePath() addrs.Module { return n.Addr } +func (n *nodeCloseModule) ReferenceOutside() (selfPath, referencePath addrs.Module) { + return n.Addr.Parent(), n.Addr +} + func (n *nodeCloseModule) ReferenceableAddrs() []addrs.Referenceable { _, call := n.Addr.Call() return []addrs.Referenceable{ @@ -195,7 +200,14 @@ func (n *evalCloseModule) Eval(ctx EvalContext) (interface{}, error) { var currentModuleInstances []addrs.ModuleInstance // we can't expand if we're just removing if !n.orphaned { - currentModuleInstances = expander.ExpandModule(n.Addr) + func() { + // FIXME: we need to "turn off" closers if their expander has been removed + defer func() { + recover() + n.orphaned = true + }() + currentModuleInstances = expander.ExpandModule(n.Addr) + }() } for modKey, mod := range state.Modules {