6 "github.com/hashicorp/terraform/config"
9 // ProviderEvalTree returns the evaluation tree for initializing and
10 // configuring providers.
11 func ProviderEvalTree(n *NodeApplyableProvider, config *config.ProviderConfig) EvalNode {
12 var provider ResourceProvider
13 var resourceConfig *ResourceConfig
15 typeName := strings.SplitN(n.NameValue, ".", 2)[0]
17 seq := make([]EvalNode, 0, 5)
18 seq = append(seq, &EvalInitProvider{
24 seq = append(seq, &EvalOpFilter{
25 Ops: []walkOperation{walkInput, walkImport},
32 &EvalInterpolateProvider{
34 Output: &resourceConfig,
36 &EvalBuildProviderConfig{
37 Provider: n.NameValue,
38 Config: &resourceConfig,
39 Output: &resourceConfig,
44 Config: &resourceConfig,
50 seq = append(seq, &EvalOpFilter{
51 Ops: []walkOperation{walkValidate},
58 &EvalInterpolateProvider{
60 Output: &resourceConfig,
62 &EvalBuildProviderConfig{
63 Provider: n.NameValue,
64 Config: &resourceConfig,
65 Output: &resourceConfig,
67 &EvalValidateProvider{
69 Config: &resourceConfig,
76 seq = append(seq, &EvalOpFilter{
77 Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
84 &EvalInterpolateProvider{
86 Output: &resourceConfig,
88 &EvalBuildProviderConfig{
89 Provider: n.NameValue,
90 Config: &resourceConfig,
91 Output: &resourceConfig,
97 // We configure on everything but validate, since validate may
98 // not have access to all the variables.
99 seq = append(seq, &EvalOpFilter{
100 Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
105 Config: &resourceConfig,
111 return &EvalSequence{Nodes: seq}
114 // CloseProviderEvalTree returns the evaluation tree for closing
115 // provider connections that aren't needed anymore.
116 func CloseProviderEvalTree(n string) EvalNode {
117 return &EvalCloseProvider{Name: n}