terraform: plan orphan destruction
This commit is contained in:
parent
2608c5f282
commit
bd8802e08d
|
@ -55,6 +55,12 @@ func (b *PlanGraphBuilder) Steps() []GraphTransformer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
concreteResourceOrphan := func(a *NodeAbstractResource) dag.Vertex {
|
||||||
|
return &NodePlannableResourceOrphan{
|
||||||
|
NodeAbstractResource: a,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
steps := []GraphTransformer{
|
steps := []GraphTransformer{
|
||||||
// Creates all the resources represented in the config
|
// Creates all the resources represented in the config
|
||||||
&ConfigTransformer{
|
&ConfigTransformer{
|
||||||
|
@ -65,6 +71,13 @@ func (b *PlanGraphBuilder) Steps() []GraphTransformer {
|
||||||
// Add the outputs
|
// Add the outputs
|
||||||
&OutputTransformer{Module: b.Module},
|
&OutputTransformer{Module: b.Module},
|
||||||
|
|
||||||
|
// Add orphan resources
|
||||||
|
&OrphanResourceTransformer{
|
||||||
|
Concrete: concreteResourceOrphan,
|
||||||
|
State: b.State,
|
||||||
|
Module: b.Module,
|
||||||
|
},
|
||||||
|
|
||||||
// Attach the configuration to any resources
|
// Attach the configuration to any resources
|
||||||
&AttachResourceConfigTransformer{Module: b.Module},
|
&AttachResourceConfigTransformer{Module: b.Module},
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
package terraform
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NodePlannableResourceOrphan represents a resource that is "applyable":
|
||||||
|
// it is ready to be applied and is represented by a diff.
|
||||||
|
type NodePlannableResourceOrphan struct {
|
||||||
|
*NodeAbstractResource
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NodePlannableResourceOrphan) Name() string {
|
||||||
|
return n.NodeAbstractResource.Name() + " (orphan)"
|
||||||
|
}
|
||||||
|
|
||||||
|
// GraphNodeEvalable
|
||||||
|
func (n *NodePlannableResourceOrphan) EvalTree() EvalNode {
|
||||||
|
addr := n.NodeAbstractResource.Addr
|
||||||
|
|
||||||
|
// stateId is the ID to put into the state
|
||||||
|
stateId := addr.stateId()
|
||||||
|
if addr.Index > -1 {
|
||||||
|
stateId = fmt.Sprintf("%s.%d", stateId, addr.Index)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the instance info. More of this will be populated during eval
|
||||||
|
info := &InstanceInfo{
|
||||||
|
Id: stateId,
|
||||||
|
Type: addr.Type,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Declare a bunch of variables that are used for state during
|
||||||
|
// evaluation. Most of this are written to by-address below.
|
||||||
|
var diff *InstanceDiff
|
||||||
|
var state *InstanceState
|
||||||
|
|
||||||
|
return &EvalSequence{
|
||||||
|
Nodes: []EvalNode{
|
||||||
|
&EvalReadState{
|
||||||
|
Name: stateId,
|
||||||
|
Output: &state,
|
||||||
|
},
|
||||||
|
&EvalDiffDestroy{
|
||||||
|
Info: info,
|
||||||
|
State: &state,
|
||||||
|
Output: &diff,
|
||||||
|
},
|
||||||
|
&EvalCheckPreventDestroy{
|
||||||
|
Resource: n.Config,
|
||||||
|
Diff: &diff,
|
||||||
|
},
|
||||||
|
&EvalWriteDiff{
|
||||||
|
Name: stateId,
|
||||||
|
Diff: &diff,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue