]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/terraform/terraform/evaltree_provider.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / evaltree_provider.go
CommitLineData
bae9f6d2
JC
1package terraform
2
3import (
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
11func 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
86func CloseProviderEvalTree(addr addrs.AbsProviderConfig) EvalNode {
87 return &EvalCloseProvider{Addr: addr.ProviderConfig}
bae9f6d2 88}