diff --git a/terraform/graph_builder_apply.go b/terraform/graph_builder_apply.go index 00ddcf5c40..292e8414a7 100644 --- a/terraform/graph_builder_apply.go +++ b/terraform/graph_builder_apply.go @@ -171,14 +171,10 @@ func (b *ApplyGraphBuilder) Steps() []GraphTransformer { Destroy: b.Destroy, }, - // Handle destroy time transformations for output and local values. - // Reverse the edges from outputs and locals, so that - // interpolations don't fail during destroy. - // Create a destroy node for outputs to remove them from the state. GraphTransformIf( func() bool { return b.Destroy }, GraphTransformMulti( - &DestroyValueReferenceTransformer{}, + // Create a destroy node for outputs to remove them from the state. &DestroyOutputTransformer{}, ), ), diff --git a/terraform/transform_destroy_edge.go b/terraform/transform_destroy_edge.go index d954d2c048..5092b3abbb 100644 --- a/terraform/transform_destroy_edge.go +++ b/terraform/transform_destroy_edge.go @@ -56,7 +56,6 @@ func (t *DestroyEdgeTransformer) Transform(g *Graph) error { // Build a map of what is being destroyed (by address string) to // the list of destroyers. destroyers := make(map[string][]GraphNodeDestroyer) - destroyerAddrs := make(map[string]addrs.AbsResourceInstance) // Record the creators, which will need to depend on the destroyers if they // are only being updated. @@ -79,7 +78,6 @@ func (t *DestroyEdgeTransformer) Transform(g *Graph) error { key := addr.String() log.Printf("[TRACE] DestroyEdgeTransformer: %q (%T) destroys %s", dag.VertexName(n), v, key) destroyers[key] = append(destroyers[key], n) - destroyerAddrs[key] = addr resAddr := addr.Resource.Resource.Absolute(addr.Module).String() destroyersByResource[resAddr] = append(destroyersByResource[resAddr], n) diff --git a/terraform/transform_reference.go b/terraform/transform_reference.go index ceff691487..371265bab9 100644 --- a/terraform/transform_reference.go +++ b/terraform/transform_reference.go @@ -176,42 +176,6 @@ func (t AttachDependenciesTransformer) Transform(g *Graph) error { return nil } -// DestroyReferenceTransformer is a GraphTransformer that reverses the edges -// for locals and outputs that depend on other nodes which will be -// removed during destroy. If a destroy node is evaluated before the local or -// output value, it will be removed from the state, and the later interpolation -// will fail. -type DestroyValueReferenceTransformer struct{} - -func (t *DestroyValueReferenceTransformer) Transform(g *Graph) error { - vs := g.Vertices() - for _, v := range vs { - switch v.(type) { - case *NodeApplyableOutput, *NodeLocal: - // OK - default: - continue - } - - // reverse any outgoing edges so that the value is evaluated first. - for _, e := range g.EdgesFrom(v) { - target := e.Target() - - // only destroy nodes will be evaluated in reverse - if _, ok := target.(GraphNodeDestroyer); !ok { - continue - } - - log.Printf("[TRACE] output dep: %s", dag.VertexName(target)) - - g.RemoveEdge(e) - g.Connect(dag.BasicEdge(target, v)) - } - } - - return nil -} - // PruneUnusedValuesTransformer is a GraphTransformer that removes local, // variable, and output values which are not referenced in the graph. If these // values reference a resource that is no longer in the state the interpolation