]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package terraform |
2 | ||
107c1cdb ND |
3 | import ( |
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. | |
15 | type NodePlanDestroyableResourceInstance struct { | |
16 | *NodeAbstractResourceInstance | |
bae9f6d2 JC |
17 | } |
18 | ||
107c1cdb ND |
19 | var ( |
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 |
33 | func (n *NodePlanDestroyableResourceInstance) DestroyAddr() *addrs.AbsResourceInstance { |
34 | addr := n.ResourceInstanceAddr() | |
35 | return &addr | |
bae9f6d2 JC |
36 | } |
37 | ||
38 | // GraphNodeEvalable | |
107c1cdb ND |
39 | func (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 | } |