no longer need DestroyValueReferenceTransformer
since destroy nodes are no longer connected to values, there's no need to try and wrangle their edges to prevent cycles during destroy.
This commit is contained in:
parent
dc8cdd260c
commit
ca5b0e6894
|
@ -171,14 +171,10 @@ func (b *ApplyGraphBuilder) Steps() []GraphTransformer {
|
||||||
Destroy: b.Destroy,
|
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(
|
GraphTransformIf(
|
||||||
func() bool { return b.Destroy },
|
func() bool { return b.Destroy },
|
||||||
GraphTransformMulti(
|
GraphTransformMulti(
|
||||||
&DestroyValueReferenceTransformer{},
|
// Create a destroy node for outputs to remove them from the state.
|
||||||
&DestroyOutputTransformer{},
|
&DestroyOutputTransformer{},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -56,7 +56,6 @@ func (t *DestroyEdgeTransformer) Transform(g *Graph) error {
|
||||||
// Build a map of what is being destroyed (by address string) to
|
// Build a map of what is being destroyed (by address string) to
|
||||||
// the list of destroyers.
|
// the list of destroyers.
|
||||||
destroyers := make(map[string][]GraphNodeDestroyer)
|
destroyers := make(map[string][]GraphNodeDestroyer)
|
||||||
destroyerAddrs := make(map[string]addrs.AbsResourceInstance)
|
|
||||||
|
|
||||||
// Record the creators, which will need to depend on the destroyers if they
|
// Record the creators, which will need to depend on the destroyers if they
|
||||||
// are only being updated.
|
// are only being updated.
|
||||||
|
@ -79,7 +78,6 @@ func (t *DestroyEdgeTransformer) Transform(g *Graph) error {
|
||||||
key := addr.String()
|
key := addr.String()
|
||||||
log.Printf("[TRACE] DestroyEdgeTransformer: %q (%T) destroys %s", dag.VertexName(n), v, key)
|
log.Printf("[TRACE] DestroyEdgeTransformer: %q (%T) destroys %s", dag.VertexName(n), v, key)
|
||||||
destroyers[key] = append(destroyers[key], n)
|
destroyers[key] = append(destroyers[key], n)
|
||||||
destroyerAddrs[key] = addr
|
|
||||||
|
|
||||||
resAddr := addr.Resource.Resource.Absolute(addr.Module).String()
|
resAddr := addr.Resource.Resource.Absolute(addr.Module).String()
|
||||||
destroyersByResource[resAddr] = append(destroyersByResource[resAddr], n)
|
destroyersByResource[resAddr] = append(destroyersByResource[resAddr], n)
|
||||||
|
|
|
@ -176,42 +176,6 @@ func (t AttachDependenciesTransformer) Transform(g *Graph) error {
|
||||||
return nil
|
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,
|
// PruneUnusedValuesTransformer is a GraphTransformer that removes local,
|
||||||
// variable, and output values which are not referenced in the graph. If these
|
// 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
|
// values reference a resource that is no longer in the state the interpolation
|
||||||
|
|
Loading…
Reference in New Issue