terraform: plan orphan destruction

This commit is contained in:
Mitchell Hashimoto 2016-11-07 08:57:27 -08:00
parent 2608c5f282
commit bd8802e08d
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
2 changed files with 72 additions and 0 deletions

View File

@ -55,6 +55,12 @@ func (b *PlanGraphBuilder) Steps() []GraphTransformer {
}
}
concreteResourceOrphan := func(a *NodeAbstractResource) dag.Vertex {
return &NodePlannableResourceOrphan{
NodeAbstractResource: a,
}
}
steps := []GraphTransformer{
// Creates all the resources represented in the config
&ConfigTransformer{
@ -65,6 +71,13 @@ func (b *PlanGraphBuilder) Steps() []GraphTransformer {
// Add the outputs
&OutputTransformer{Module: b.Module},
// Add orphan resources
&OrphanResourceTransformer{
Concrete: concreteResourceOrphan,
State: b.State,
Module: b.Module,
},
// Attach the configuration to any resources
&AttachResourceConfigTransformer{Module: b.Module},

View File

@ -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,
},
},
}
}