diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/terraform/transform_expand.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/terraform/transform_expand.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/terraform/transform_expand.go b/vendor/github.com/hashicorp/terraform/terraform/transform_expand.go new file mode 100644 index 0000000..982c098 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/terraform/transform_expand.go | |||
@@ -0,0 +1,48 @@ | |||
1 | package terraform | ||
2 | |||
3 | import ( | ||
4 | "log" | ||
5 | |||
6 | "github.com/hashicorp/terraform/dag" | ||
7 | ) | ||
8 | |||
9 | // GraphNodeExapndable is an interface that nodes can implement to | ||
10 | // signal that they can be expanded. Expanded nodes turn into | ||
11 | // GraphNodeSubgraph nodes within the graph. | ||
12 | type GraphNodeExpandable interface { | ||
13 | Expand(GraphBuilder) (GraphNodeSubgraph, error) | ||
14 | } | ||
15 | |||
16 | // GraphNodeDynamicExpandable is an interface that nodes can implement | ||
17 | // to signal that they can be expanded at eval-time (hence dynamic). | ||
18 | // These nodes are given the eval context and are expected to return | ||
19 | // a new subgraph. | ||
20 | type GraphNodeDynamicExpandable interface { | ||
21 | DynamicExpand(EvalContext) (*Graph, error) | ||
22 | } | ||
23 | |||
24 | // GraphNodeSubgraph is an interface a node can implement if it has | ||
25 | // a larger subgraph that should be walked. | ||
26 | type GraphNodeSubgraph interface { | ||
27 | Subgraph() dag.Grapher | ||
28 | } | ||
29 | |||
30 | // ExpandTransform is a transformer that does a subgraph expansion | ||
31 | // at graph transform time (vs. at eval time). The benefit of earlier | ||
32 | // subgraph expansion is that errors with the graph build can be detected | ||
33 | // at an earlier stage. | ||
34 | type ExpandTransform struct { | ||
35 | Builder GraphBuilder | ||
36 | } | ||
37 | |||
38 | func (t *ExpandTransform) Transform(v dag.Vertex) (dag.Vertex, error) { | ||
39 | ev, ok := v.(GraphNodeExpandable) | ||
40 | if !ok { | ||
41 | // This isn't an expandable vertex, so just ignore it. | ||
42 | return v, nil | ||
43 | } | ||
44 | |||
45 | // Expand the subgraph! | ||
46 | log.Printf("[DEBUG] vertex %q: static expanding", dag.VertexName(ev)) | ||
47 | return ev.Expand(t.Builder) | ||
48 | } | ||