4 "github.com/hashicorp/terraform/addrs"
5 "github.com/hashicorp/terraform/configs"
6 "github.com/hashicorp/terraform/providers"
9 // ProviderEvalTree returns the evaluation tree for initializing and
10 // configuring providers.
11 func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNode {
12 var provider providers.Interface
15 relAddr := addr.ProviderConfig
17 seq := make([]EvalNode, 0, 5)
18 seq = append(seq, &EvalInitProvider{
19 TypeName: relAddr.Type,
20 Addr: addr.ProviderConfig,
24 seq = append(seq, &EvalOpFilter{
25 Ops: []walkOperation{walkImport},
36 seq = append(seq, &EvalOpFilter{
37 Ops: []walkOperation{walkValidate},
44 &EvalValidateProvider{
54 seq = append(seq, &EvalOpFilter{
55 Ops: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},
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},
81 return &EvalSequence{Nodes: seq}
84 // CloseProviderEvalTree returns the evaluation tree for closing
85 // provider connections that aren't needed anymore.
86 func CloseProviderEvalTree(addr addrs.AbsProviderConfig) EvalNode {
87 return &EvalCloseProvider{Addr: addr.ProviderConfig}