]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/terraform/terraform/node_resource_plan_destroy.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / node_resource_plan_destroy.go
CommitLineData
bae9f6d2
JC
1package terraform
2
107c1cdb
ND
3import (
4 "fmt"
5
6 "github.com/hashicorp/terraform/addrs"
7 "github.com/hashicorp/terraform/dag"
8 "github.com/hashicorp/terraform/plans"
9 "github.com/hashicorp/terraform/providers"
10 "github.com/hashicorp/terraform/states"
11)
12
13// NodePlanDestroyableResourceInstance represents a resource that is ready
14// to be planned for destruction.
15type NodePlanDestroyableResourceInstance struct {
16 *NodeAbstractResourceInstance
bae9f6d2
JC
17}
18
107c1cdb
ND
19var (
20 _ GraphNodeSubPath = (*NodePlanDestroyableResourceInstance)(nil)
21 _ GraphNodeReferenceable = (*NodePlanDestroyableResourceInstance)(nil)
22 _ GraphNodeReferencer = (*NodePlanDestroyableResourceInstance)(nil)
23 _ GraphNodeDestroyer = (*NodePlanDestroyableResourceInstance)(nil)
24 _ GraphNodeResource = (*NodePlanDestroyableResourceInstance)(nil)
25 _ GraphNodeResourceInstance = (*NodePlanDestroyableResourceInstance)(nil)
26 _ GraphNodeAttachResourceConfig = (*NodePlanDestroyableResourceInstance)(nil)
27 _ GraphNodeAttachResourceState = (*NodePlanDestroyableResourceInstance)(nil)
28 _ GraphNodeEvalable = (*NodePlanDestroyableResourceInstance)(nil)
29 _ GraphNodeProviderConsumer = (*NodePlanDestroyableResourceInstance)(nil)
30)
31
bae9f6d2 32// GraphNodeDestroyer
107c1cdb
ND
33func (n *NodePlanDestroyableResourceInstance) DestroyAddr() *addrs.AbsResourceInstance {
34 addr := n.ResourceInstanceAddr()
35 return &addr
bae9f6d2
JC
36}
37
38// GraphNodeEvalable
107c1cdb
ND
39func (n *NodePlanDestroyableResourceInstance) EvalTree() EvalNode {
40 addr := n.ResourceInstanceAddr()
bae9f6d2 41
107c1cdb
ND
42 // Declare a bunch of variables that are used for state during
43 // evaluation. These are written to by address in the EvalNodes we
44 // declare below.
45 var provider providers.Interface
46 var providerSchema *ProviderSchema
47 var change *plans.ResourceInstanceChange
48 var state *states.ResourceInstanceObject
bae9f6d2 49
107c1cdb
ND
50 if n.ResolvedProvider.ProviderConfig.Type == "" {
51 // Should never happen; indicates that the graph was not constructed
52 // correctly since we didn't get our provider attached.
53 panic(fmt.Sprintf("%T %q was not assigned a resolved provider", n, dag.VertexName(n)))
bae9f6d2
JC
54 }
55
bae9f6d2
JC
56 return &EvalSequence{
57 Nodes: []EvalNode{
107c1cdb
ND
58 &EvalGetProvider{
59 Addr: n.ResolvedProvider,
60 Output: &provider,
61 Schema: &providerSchema,
62 },
bae9f6d2 63 &EvalReadState{
107c1cdb
ND
64 Addr: addr.Resource,
65 Provider: &provider,
66 ProviderSchema: &providerSchema,
67
bae9f6d2
JC
68 Output: &state,
69 },
70 &EvalDiffDestroy{
107c1cdb
ND
71 Addr: addr.Resource,
72 ProviderAddr: n.ResolvedProvider,
73 State: &state,
74 Output: &change,
bae9f6d2
JC
75 },
76 &EvalCheckPreventDestroy{
107c1cdb
ND
77 Addr: addr.Resource,
78 Config: n.Config,
79 Change: &change,
bae9f6d2
JC
80 },
81 &EvalWriteDiff{
107c1cdb
ND
82 Addr: addr.Resource,
83 ProviderSchema: &providerSchema,
84 Change: &change,
bae9f6d2
JC
85 },
86 },
87 }
88}