diff --git a/terraform/graph_config_node.go b/terraform/graph_config_node.go index 06af6c0fec..16ca7522b7 100644 --- a/terraform/graph_config_node.go +++ b/terraform/graph_config_node.go @@ -180,8 +180,6 @@ type GraphNodeConfigResource struct { // destroyed. It doesn't mean that the resource WILL be destroyed, only // that logically this node is where it would happen. Destroy bool - - destroyNode GraphNodeDestroy } func (n *GraphNodeConfigResource) DependableName() []string { @@ -303,20 +301,14 @@ func (n *GraphNodeConfigResource) DestroyNode() GraphNodeDestroy { return nil } - // If we already made the node, return that - if n.destroyNode != nil { - return n.destroyNode - } - // Just make a copy that is set to destroy result := &graphNodeResourceDestroy{ GraphNodeConfigResource: *n, Original: n, } result.Destroy = true - n.destroyNode = result - return n.destroyNode + return result } // graphNodeResourceDestroy represents the logical destruction of a diff --git a/terraform/transform_destroy.go b/terraform/transform_destroy.go index a97246b5dd..81e2d33d87 100644 --- a/terraform/transform_destroy.go +++ b/terraform/transform_destroy.go @@ -1,7 +1,6 @@ package terraform import ( - "fmt" "strings" "github.com/hashicorp/terraform/dag" @@ -12,8 +11,7 @@ import ( // destroy nodes in the graph and the dependency ordering of those destroys. type GraphNodeDestroyable interface { // DestroyNode returns the node used for the destroy. This should - // return the same node every time so that it can be used later for - // lookups as well. + // return a new destroy node that isn't in the graph. DestroyNode() GraphNodeDestroy } @@ -46,6 +44,7 @@ type DestroyTransformer struct{} func (t *DestroyTransformer) Transform(g *Graph) error { nodes := make(map[dag.Vertex]struct{}, len(g.Vertices())) + nodeToDn := make(map[dag.Vertex]dag.Vertex, len(g.Vertices())) for _, v := range g.Vertices() { // If it is not a destroyable, we don't care dn, ok := v.(GraphNodeDestroyable) @@ -61,6 +60,7 @@ func (t *DestroyTransformer) Transform(g *Graph) error { // Store it nodes[n] = struct{}{} + nodeToDn[dn] = n // Add it to the graph g.Add(n) @@ -86,18 +86,11 @@ func (t *DestroyTransformer) Transform(g *Graph) error { continue } - newTarget := dn.DestroyNode() + newTarget := nodeToDn[dn] if newTarget == nil { continue } - if _, ok := nodes[newTarget]; !ok { - return fmt.Errorf( - "%s: didn't generate same DestroyNode: %s", - dag.VertexName(target), - dag.VertexName(newTarget)) - } - // Make the new edge and transpose g.Connect(dag.BasicEdge(newTarget, n))