68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package terraform
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/config/module"
|
|
"github.com/hashicorp/terraform/dag"
|
|
)
|
|
|
|
// DestroyPlanGraphBuilder implements GraphBuilder and is responsible for
|
|
// planning a pure-destroy.
|
|
//
|
|
// Planning a pure destroy operation is simple because we can ignore most
|
|
// ordering configuration and simply reverse the state.
|
|
type DestroyPlanGraphBuilder struct {
|
|
// Module is the root module for the graph to build.
|
|
Module *module.Tree
|
|
|
|
// State is the current state
|
|
State *State
|
|
|
|
// Targets are resources to target
|
|
Targets []string
|
|
|
|
// Validate will do structural validation of the graph.
|
|
Validate bool
|
|
}
|
|
|
|
// See GraphBuilder
|
|
func (b *DestroyPlanGraphBuilder) Build(path []string) (*Graph, error) {
|
|
return (&BasicGraphBuilder{
|
|
Steps: b.Steps(),
|
|
Validate: b.Validate,
|
|
Name: "DestroyPlanGraphBuilder",
|
|
}).Build(path)
|
|
}
|
|
|
|
// See GraphBuilder
|
|
func (b *DestroyPlanGraphBuilder) Steps() []GraphTransformer {
|
|
concreteResource := func(a *NodeAbstractResource) dag.Vertex {
|
|
return &NodePlanDestroyableResource{
|
|
NodeAbstractResource: a,
|
|
}
|
|
}
|
|
|
|
steps := []GraphTransformer{
|
|
// Creates all the nodes represented in the state.
|
|
&StateTransformer{
|
|
Concrete: concreteResource,
|
|
State: b.State,
|
|
},
|
|
|
|
// Attach the configuration to any resources
|
|
&AttachResourceConfigTransformer{Module: b.Module},
|
|
|
|
// Destruction ordering. We require this only so that
|
|
// targeting below will prune the correct things.
|
|
&DestroyEdgeTransformer{Module: b.Module, State: b.State},
|
|
|
|
// Target. Note we don't set "Destroy: true" here since we already
|
|
// created proper destroy ordering.
|
|
&TargetsTransformer{Targets: b.Targets},
|
|
|
|
// Single root
|
|
&RootTransformer{},
|
|
}
|
|
|
|
return steps
|
|
}
|