github.com/acm1/terraform@v0.6.2-0.20150729164239-1f314444f45c/terraform/evaltree_provider.go (about) 1 package terraform 2 3 import ( 4 "github.com/hashicorp/terraform/config" 5 ) 6 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 12 13 seq := make([]EvalNode, 0, 5) 14 seq = append(seq, &EvalInitProvider{Name: n}) 15 16 // Input stuff 17 seq = append(seq, &EvalOpFilter{ 18 Ops: []walkOperation{walkInput}, 19 Node: &EvalSequence{ 20 Nodes: []EvalNode{ 21 &EvalGetProvider{ 22 Name: n, 23 Output: &provider, 24 }, 25 &EvalInterpolate{ 26 Config: config, 27 Output: &resourceConfig, 28 }, 29 &EvalBuildProviderConfig{ 30 Provider: n, 31 Config: &resourceConfig, 32 Output: &resourceConfig, 33 }, 34 &EvalInputProvider{ 35 Name: n, 36 Provider: &provider, 37 Config: &resourceConfig, 38 }, 39 }, 40 }, 41 }) 42 43 // Apply stuff 44 seq = append(seq, &EvalOpFilter{ 45 Ops: []walkOperation{walkValidate, walkRefresh, walkPlan, walkApply}, 46 Node: &EvalSequence{ 47 Nodes: []EvalNode{ 48 &EvalGetProvider{ 49 Name: n, 50 Output: &provider, 51 }, 52 &EvalInterpolate{ 53 Config: config, 54 Output: &resourceConfig, 55 }, 56 &EvalBuildProviderConfig{ 57 Provider: n, 58 Config: &resourceConfig, 59 Output: &resourceConfig, 60 }, 61 &EvalValidateProvider{ 62 Provider: &provider, 63 Config: &resourceConfig, 64 }, 65 &EvalSetProviderConfig{ 66 Provider: n, 67 Config: &resourceConfig, 68 }, 69 }, 70 }, 71 }) 72 73 // We configure on everything but validate, since validate may 74 // not have access to all the variables. 75 seq = append(seq, &EvalOpFilter{ 76 Ops: []walkOperation{walkRefresh, walkPlan, walkApply}, 77 Node: &EvalSequence{ 78 Nodes: []EvalNode{ 79 &EvalConfigProvider{ 80 Provider: n, 81 Config: &resourceConfig, 82 }, 83 }, 84 }, 85 }) 86 87 return &EvalSequence{Nodes: seq} 88 } 89 90 // CloseProviderEvalTree returns the evaluation tree for closing 91 // provider connections that aren't needed anymore. 92 func CloseProviderEvalTree(n string) EvalNode { 93 return &EvalCloseProvider{Name: n} 94 }