github.com/rmenn/terraform@v0.3.8-0.20150225065417-fc84b3a78802/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  				&EvalInputProvider{
    26  					Name:     n,
    27  					Provider: &provider,
    28  					Config:   config,
    29  				},
    30  			},
    31  		},
    32  	})
    33  
    34  	// Apply stuff
    35  	seq = append(seq, &EvalOpFilter{
    36  		Ops: []walkOperation{walkValidate, walkRefresh, walkPlan, walkApply},
    37  		Node: &EvalSequence{
    38  			Nodes: []EvalNode{
    39  				&EvalGetProvider{
    40  					Name:   n,
    41  					Output: &provider,
    42  				},
    43  				&EvalInterpolate{
    44  					Config: config,
    45  					Output: &resourceConfig,
    46  				},
    47  				&EvalValidateProvider{
    48  					ProviderName: n,
    49  					Provider:     &provider,
    50  					Config:       &resourceConfig,
    51  				},
    52  				&EvalConfigProvider{
    53  					Provider: n,
    54  					Config:   &resourceConfig,
    55  				},
    56  			},
    57  		},
    58  	})
    59  
    60  	return &EvalSequence{Nodes: seq}
    61  }