package terraform
import (
- "strings"
-
- "github.com/hashicorp/terraform/config"
+ "github.com/hashicorp/terraform/addrs"
+ "github.com/hashicorp/terraform/configs"
+ "github.com/hashicorp/terraform/providers"
)
// ProviderEvalTree returns the evaluation tree for initializing and
// configuring providers.
-func ProviderEvalTree(n *NodeApplyableProvider, config *config.ProviderConfig) EvalNode {
- var provider ResourceProvider
- var resourceConfig *ResourceConfig
+func ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNode {
+ var provider providers.Interface
- typeName := strings.SplitN(n.NameValue, ".", 2)[0]
+ addr := n.Addr
+ relAddr := addr.ProviderConfig
seq := make([]EvalNode, 0, 5)
seq = append(seq, &EvalInitProvider{
- TypeName: typeName,
- Name: n.Name(),
+ TypeName: relAddr.Type,
+ Addr: addr.ProviderConfig,
})
// Input stuff
seq = append(seq, &EvalOpFilter{
- Ops: []walkOperation{walkInput, walkImport},
+ Ops: []walkOperation{walkImport},
Node: &EvalSequence{
Nodes: []EvalNode{
&EvalGetProvider{
- Name: n.Name(),
+ Addr: addr,
Output: &provider,
},
- &EvalInterpolateProvider{
- Config: config,
- Output: &resourceConfig,
- },
- &EvalBuildProviderConfig{
- Provider: n.NameValue,
- Config: &resourceConfig,
- Output: &resourceConfig,
- },
- &EvalInputProvider{
- Name: n.NameValue,
- Provider: &provider,
- Config: &resourceConfig,
- },
},
},
})
Node: &EvalSequence{
Nodes: []EvalNode{
&EvalGetProvider{
- Name: n.Name(),
+ Addr: addr,
Output: &provider,
},
- &EvalInterpolateProvider{
- Config: config,
- Output: &resourceConfig,
- },
- &EvalBuildProviderConfig{
- Provider: n.NameValue,
- Config: &resourceConfig,
- Output: &resourceConfig,
- },
&EvalValidateProvider{
+ Addr: relAddr,
Provider: &provider,
- Config: &resourceConfig,
+ Config: config,
},
},
},
Node: &EvalSequence{
Nodes: []EvalNode{
&EvalGetProvider{
- Name: n.Name(),
+ Addr: addr,
Output: &provider,
},
- &EvalInterpolateProvider{
- Config: config,
- Output: &resourceConfig,
- },
- &EvalBuildProviderConfig{
- Provider: n.NameValue,
- Config: &resourceConfig,
- Output: &resourceConfig,
- },
},
},
})
Node: &EvalSequence{
Nodes: []EvalNode{
&EvalConfigProvider{
- Provider: n.Name(),
- Config: &resourceConfig,
+ Addr: relAddr,
+ Provider: &provider,
+ Config: config,
},
},
},
// CloseProviderEvalTree returns the evaluation tree for closing
// provider connections that aren't needed anymore.
-func CloseProviderEvalTree(n string) EvalNode {
- return &EvalCloseProvider{Name: n}
+func CloseProviderEvalTree(addr addrs.AbsProviderConfig) EvalNode {
+ return &EvalCloseProvider{Addr: addr.ProviderConfig}
}