]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package terraform |
2 | ||
107c1cdb ND |
3 | import ( |
4 | "github.com/hashicorp/terraform/plans" | |
5 | "github.com/hashicorp/terraform/providers" | |
6 | "github.com/hashicorp/terraform/states" | |
7 | ) | |
8 | ||
9 | // NodePlannableResourceInstanceOrphan represents a resource that is "applyable": | |
bae9f6d2 | 10 | // it is ready to be applied and is represented by a diff. |
107c1cdb ND |
11 | type NodePlannableResourceInstanceOrphan struct { |
12 | *NodeAbstractResourceInstance | |
bae9f6d2 JC |
13 | } |
14 | ||
107c1cdb ND |
15 | var ( |
16 | _ GraphNodeSubPath = (*NodePlannableResourceInstanceOrphan)(nil) | |
17 | _ GraphNodeReferenceable = (*NodePlannableResourceInstanceOrphan)(nil) | |
18 | _ GraphNodeReferencer = (*NodePlannableResourceInstanceOrphan)(nil) | |
19 | _ GraphNodeResource = (*NodePlannableResourceInstanceOrphan)(nil) | |
20 | _ GraphNodeResourceInstance = (*NodePlannableResourceInstanceOrphan)(nil) | |
21 | _ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstanceOrphan)(nil) | |
22 | _ GraphNodeAttachResourceState = (*NodePlannableResourceInstanceOrphan)(nil) | |
23 | _ GraphNodeEvalable = (*NodePlannableResourceInstanceOrphan)(nil) | |
24 | ) | |
bae9f6d2 | 25 | |
107c1cdb ND |
26 | var ( |
27 | _ GraphNodeEvalable = (*NodePlannableResourceInstanceOrphan)(nil) | |
28 | ) | |
bae9f6d2 | 29 | |
107c1cdb ND |
30 | func (n *NodePlannableResourceInstanceOrphan) Name() string { |
31 | return n.ResourceInstanceAddr().String() + " (orphan)" | |
32 | } | |
bae9f6d2 | 33 | |
107c1cdb ND |
34 | // GraphNodeEvalable |
35 | func (n *NodePlannableResourceInstanceOrphan) EvalTree() EvalNode { | |
36 | addr := n.ResourceInstanceAddr() | |
bae9f6d2 JC |
37 | |
38 | // Declare a bunch of variables that are used for state during | |
39 | // evaluation. Most of this are written to by-address below. | |
107c1cdb ND |
40 | var change *plans.ResourceInstanceChange |
41 | var state *states.ResourceInstanceObject | |
42 | var provider providers.Interface | |
43 | var providerSchema *ProviderSchema | |
bae9f6d2 JC |
44 | |
45 | return &EvalSequence{ | |
46 | Nodes: []EvalNode{ | |
107c1cdb ND |
47 | &EvalGetProvider{ |
48 | Addr: n.ResolvedProvider, | |
49 | Output: &provider, | |
50 | Schema: &providerSchema, | |
51 | }, | |
bae9f6d2 | 52 | &EvalReadState{ |
107c1cdb ND |
53 | Addr: addr.Resource, |
54 | Provider: &provider, | |
55 | ProviderSchema: &providerSchema, | |
56 | ||
bae9f6d2 JC |
57 | Output: &state, |
58 | }, | |
59 | &EvalDiffDestroy{ | |
107c1cdb ND |
60 | Addr: addr.Resource, |
61 | State: &state, | |
62 | ProviderAddr: n.ResolvedProvider, | |
63 | Output: &change, | |
64 | OutputState: &state, // Will point to a nil state after this complete, signalling destroyed | |
bae9f6d2 JC |
65 | }, |
66 | &EvalCheckPreventDestroy{ | |
107c1cdb ND |
67 | Addr: addr.Resource, |
68 | Config: n.Config, | |
69 | Change: &change, | |
bae9f6d2 JC |
70 | }, |
71 | &EvalWriteDiff{ | |
107c1cdb ND |
72 | Addr: addr.Resource, |
73 | ProviderSchema: &providerSchema, | |
74 | Change: &change, | |
75 | }, | |
76 | &EvalWriteState{ | |
77 | Addr: addr.Resource, | |
78 | ProviderAddr: n.ResolvedProvider, | |
79 | ProviderSchema: &providerSchema, | |
80 | State: &state, | |
bae9f6d2 JC |
81 | }, |
82 | }, | |
83 | } | |
84 | } |