4 "github.com/hashicorp/terraform/config"
7 // ProviderEvalTree returns the evaluation tree for initializing and
8 // configuring providers.
9 func ProviderEvalTree(n string, config *config.RawConfig) EvalNode {
10 var provider ResourceProvider
11 var resourceConfig *ResourceConfig
13 seq := make([]EvalNode, 0, 5)
14 seq = append(seq, &EvalInitProvider{Name: n})
17 seq = append(seq, &EvalOpFilter{
18 Ops: []walkOperation{walkInput, walkImport},
27 Output: &resourceConfig,
29 &EvalBuildProviderConfig{
31 Config: &resourceConfig,
32 Output: &resourceConfig,
37 Config: &resourceConfig,
43 seq = append(seq, &EvalOpFilter{
44 Ops: []walkOperation{walkValidate},
53 Output: &resourceConfig,
55 &EvalBuildProviderConfig{
57 Config: &resourceConfig,
58 Output: &resourceConfig,
60 &EvalValidateProvider{
62 Config: &resourceConfig,
64 &EvalSetProviderConfig{
66 Config: &resourceConfig,
73 seq = append(seq, &EvalOpFilter{
74 Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
83 Output: &resourceConfig,
85 &EvalBuildProviderConfig{
87 Config: &resourceConfig,
88 Output: &resourceConfig,
90 &EvalSetProviderConfig{
92 Config: &resourceConfig,
98 // We configure on everything but validate, since validate may
99 // not have access to all the variables.
100 seq = append(seq, &EvalOpFilter{
101 Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
106 Config: &resourceConfig,
112 return &EvalSequence{Nodes: seq}
115 // CloseProviderEvalTree returns the evaluation tree for closing
116 // provider connections that aren't needed anymore.
117 func CloseProviderEvalTree(n string) EvalNode {
118 return &EvalCloseProvider{Name: n}