]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - 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
1 package terraform
2
3 import (
4 "github.com/hashicorp/terraform/addrs"
5 "github.com/hashicorp/terraform/configs"
6 "github.com/hashicorp/terraform/providers"
7 )
8
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
13
14 addr := n.Addr
15 relAddr := addr.ProviderConfig
16
17 seq := make([]EvalNode, 0, 5)
18 seq = append(seq, &EvalInitProvider{
19 TypeName: relAddr.Type,
20 Addr: addr.ProviderConfig,
21 })
22
23 // Input stuff
24 seq = append(seq, &EvalOpFilter{
25 Ops: []walkOperation{walkImport},
26 Node: &EvalSequence{
27 Nodes: []EvalNode{
28 &EvalGetProvider{
29 Addr: addr,
30 Output: &provider,
31 },
32 },
33 },
34 })
35
36 seq = append(seq, &EvalOpFilter{
37 Ops: []walkOperation{walkValidate},
38 Node: &EvalSequence{
39 Nodes: []EvalNode{
40 &EvalGetProvider{
41 Addr: addr,
42 Output: &provider,
43 },
44 &EvalValidateProvider{
45 Addr: relAddr,
46 Provider: &provider,
47 Config: config,
48 },
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{
59 Addr: addr,
60 Output: &provider,
61 },
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{
73 Addr: relAddr,
74 Provider: &provider,
75 Config: config,
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.
86 func CloseProviderEvalTree(addr addrs.AbsProviderConfig) EvalNode {
87 return &EvalCloseProvider{Addr: addr.ProviderConfig}
88 }