]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package terraform |
2 | ||
3 | import ( | |
107c1cdb ND |
4 | "github.com/hashicorp/terraform/addrs" |
5 | "github.com/hashicorp/terraform/configs" | |
6 | "github.com/hashicorp/terraform/providers" | |
bae9f6d2 JC |
7 | ) |
8 | ||
9 | // ProviderEvalTree returns the evaluation tree for initializing and | |
10 | // configuring providers. | |
107c1cdb ND |
11 | func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNode { |
12 | var provider providers.Interface | |
bae9f6d2 | 13 | |
107c1cdb ND |
14 | addr := n.Addr |
15 | relAddr := addr.ProviderConfig | |
15c0b25d | 16 | |
bae9f6d2 | 17 | seq := make([]EvalNode, 0, 5) |
15c0b25d | 18 | seq = append(seq, &EvalInitProvider{ |
107c1cdb ND |
19 | TypeName: relAddr.Type, |
20 | Addr: addr.ProviderConfig, | |
15c0b25d | 21 | }) |
bae9f6d2 JC |
22 | |
23 | // Input stuff | |
24 | seq = append(seq, &EvalOpFilter{ | |
107c1cdb | 25 | Ops: []walkOperation{walkImport}, |
bae9f6d2 JC |
26 | Node: &EvalSequence{ |
27 | Nodes: []EvalNode{ | |
28 | &EvalGetProvider{ | |
107c1cdb | 29 | Addr: addr, |
bae9f6d2 JC |
30 | Output: &provider, |
31 | }, | |
bae9f6d2 JC |
32 | }, |
33 | }, | |
34 | }) | |
35 | ||
36 | seq = append(seq, &EvalOpFilter{ | |
37 | Ops: []walkOperation{walkValidate}, | |
38 | Node: &EvalSequence{ | |
39 | Nodes: []EvalNode{ | |
40 | &EvalGetProvider{ | |
107c1cdb | 41 | Addr: addr, |
bae9f6d2 JC |
42 | Output: &provider, |
43 | }, | |
bae9f6d2 | 44 | &EvalValidateProvider{ |
107c1cdb | 45 | Addr: relAddr, |
bae9f6d2 | 46 | Provider: &provider, |
107c1cdb | 47 | Config: config, |
bae9f6d2 | 48 | }, |
bae9f6d2 JC |
49 | }, |
50 | }, | |
51 | }) | |
52 | ||
53 | // Apply stuff | |
54 | seq = append(seq, &EvalOpFilter{ | |
55 | Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport}, | |
56 | Node: &EvalSequence{ | |
57 | Nodes: []EvalNode{ | |
58 | &EvalGetProvider{ | |
107c1cdb | 59 | Addr: addr, |
bae9f6d2 JC |
60 | Output: &provider, |
61 | }, | |
bae9f6d2 JC |
62 | }, |
63 | }, | |
64 | }) | |
65 | ||
66 | // We configure on everything but validate, since validate may | |
67 | // not have access to all the variables. | |
68 | seq = append(seq, &EvalOpFilter{ | |
69 | Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport}, | |
70 | Node: &EvalSequence{ | |
71 | Nodes: []EvalNode{ | |
72 | &EvalConfigProvider{ | |
107c1cdb ND |
73 | Addr: relAddr, |
74 | Provider: &provider, | |
75 | Config: config, | |
bae9f6d2 JC |
76 | }, |
77 | }, | |
78 | }, | |
79 | }) | |
80 | ||
81 | return &EvalSequence{Nodes: seq} | |
82 | } | |
83 | ||
84 | // CloseProviderEvalTree returns the evaluation tree for closing | |
85 | // provider connections that aren't needed anymore. | |
107c1cdb ND |
86 | func CloseProviderEvalTree(addr addrs.AbsProviderConfig) EvalNode { |
87 | return &EvalCloseProvider{Addr: addr.ProviderConfig} | |
bae9f6d2 | 88 | } |