github.com/nicgrayson/terraform@v0.4.3-0.20150415203910-c4de50829380/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  				&EvalConfigProvider{
    66  					Provider: n,
    67  					Config:   &resourceConfig,
    68  				},
    69  			},
    70  		},
    71  	})
    72  
    73  	return &EvalSequence{Nodes: seq}
    74  }