diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/addrs/resource_phase.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/addrs/resource_phase.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/addrs/resource_phase.go b/vendor/github.com/hashicorp/terraform/addrs/resource_phase.go new file mode 100644 index 0000000..9bdbdc4 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/addrs/resource_phase.go | |||
@@ -0,0 +1,105 @@ | |||
1 | package addrs | ||
2 | |||
3 | import "fmt" | ||
4 | |||
5 | // ResourceInstancePhase is a special kind of reference used only internally | ||
6 | // during graph building to represent resource instances that are in a | ||
7 | // non-primary state. | ||
8 | // | ||
9 | // Graph nodes can declare themselves referenceable via an instance phase | ||
10 | // or can declare that they reference an instance phase in order to accomodate | ||
11 | // secondary graph nodes dealing with, for example, destroy actions. | ||
12 | // | ||
13 | // This special reference type cannot be accessed directly by end-users, and | ||
14 | // should never be shown in the UI. | ||
15 | type ResourceInstancePhase struct { | ||
16 | referenceable | ||
17 | ResourceInstance ResourceInstance | ||
18 | Phase ResourceInstancePhaseType | ||
19 | } | ||
20 | |||
21 | var _ Referenceable = ResourceInstancePhase{} | ||
22 | |||
23 | // Phase returns a special "phase address" for the receving instance. See the | ||
24 | // documentation of ResourceInstancePhase for the limited situations where this | ||
25 | // is intended to be used. | ||
26 | func (r ResourceInstance) Phase(rpt ResourceInstancePhaseType) ResourceInstancePhase { | ||
27 | return ResourceInstancePhase{ | ||
28 | ResourceInstance: r, | ||
29 | Phase: rpt, | ||
30 | } | ||
31 | } | ||
32 | |||
33 | // ContainingResource returns an address for the same phase of the resource | ||
34 | // that this instance belongs to. | ||
35 | func (rp ResourceInstancePhase) ContainingResource() ResourcePhase { | ||
36 | return rp.ResourceInstance.Resource.Phase(rp.Phase) | ||
37 | } | ||
38 | |||
39 | func (rp ResourceInstancePhase) String() string { | ||
40 | // We use a different separator here than usual to ensure that we'll | ||
41 | // never conflict with any non-phased resource instance string. This | ||
42 | // is intentionally something that would fail parsing with ParseRef, | ||
43 | // because this special address type should never be exposed in the UI. | ||
44 | return fmt.Sprintf("%s#%s", rp.ResourceInstance, rp.Phase) | ||
45 | } | ||
46 | |||
47 | // ResourceInstancePhaseType is an enumeration used with ResourceInstancePhase. | ||
48 | type ResourceInstancePhaseType string | ||
49 | |||
50 | const ( | ||
51 | // ResourceInstancePhaseDestroy represents the "destroy" phase of a | ||
52 | // resource instance. | ||
53 | ResourceInstancePhaseDestroy ResourceInstancePhaseType = "destroy" | ||
54 | |||
55 | // ResourceInstancePhaseDestroyCBD is similar to ResourceInstancePhaseDestroy | ||
56 | // but is used for resources that have "create_before_destroy" set, thus | ||
57 | // requiring a different dependency ordering. | ||
58 | ResourceInstancePhaseDestroyCBD ResourceInstancePhaseType = "destroy-cbd" | ||
59 | ) | ||
60 | |||
61 | func (rpt ResourceInstancePhaseType) String() string { | ||
62 | return string(rpt) | ||
63 | } | ||
64 | |||
65 | // ResourcePhase is a special kind of reference used only internally | ||
66 | // during graph building to represent resources that are in a | ||
67 | // non-primary state. | ||
68 | // | ||
69 | // Graph nodes can declare themselves referenceable via a resource phase | ||
70 | // or can declare that they reference a resource phase in order to accomodate | ||
71 | // secondary graph nodes dealing with, for example, destroy actions. | ||
72 | // | ||
73 | // Since resources (as opposed to instances) aren't actually phased, this | ||
74 | // address type is used only as an approximation during initial construction | ||
75 | // of the resource-oriented plan graph, under the assumption that resource | ||
76 | // instances with ResourceInstancePhase addresses will be created in dynamic | ||
77 | // subgraphs during the graph walk. | ||
78 | // | ||
79 | // This special reference type cannot be accessed directly by end-users, and | ||
80 | // should never be shown in the UI. | ||
81 | type ResourcePhase struct { | ||
82 | referenceable | ||
83 | Resource Resource | ||
84 | Phase ResourceInstancePhaseType | ||
85 | } | ||
86 | |||
87 | var _ Referenceable = ResourcePhase{} | ||
88 | |||
89 | // Phase returns a special "phase address" for the receving instance. See the | ||
90 | // documentation of ResourceInstancePhase for the limited situations where this | ||
91 | // is intended to be used. | ||
92 | func (r Resource) Phase(rpt ResourceInstancePhaseType) ResourcePhase { | ||
93 | return ResourcePhase{ | ||
94 | Resource: r, | ||
95 | Phase: rpt, | ||
96 | } | ||
97 | } | ||
98 | |||
99 | func (rp ResourcePhase) String() string { | ||
100 | // We use a different separator here than usual to ensure that we'll | ||
101 | // never conflict with any non-phased resource instance string. This | ||
102 | // is intentionally something that would fail parsing with ParseRef, | ||
103 | // because this special address type should never be exposed in the UI. | ||
104 | return fmt.Sprintf("%s#%s", rp.Resource, rp.Phase) | ||
105 | } | ||