github.com/adrian-bl/terraform@v0.7.0-rc2.0.20160705220747-de0a34fc3517/terraform/graph_config_node_output.go (about)

     1  package terraform
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/terraform/config"
     7  	"github.com/hashicorp/terraform/dag"
     8  )
     9  
    10  // GraphNodeConfigOutput represents an output configured within the
    11  // configuration.
    12  type GraphNodeConfigOutput struct {
    13  	Output *config.Output
    14  }
    15  
    16  func (n *GraphNodeConfigOutput) Name() string {
    17  	return fmt.Sprintf("output.%s", n.Output.Name)
    18  }
    19  
    20  func (n *GraphNodeConfigOutput) ConfigType() GraphNodeConfigType {
    21  	return GraphNodeConfigTypeOutput
    22  }
    23  
    24  func (n *GraphNodeConfigOutput) OutputName() string {
    25  	return n.Output.Name
    26  }
    27  
    28  func (n *GraphNodeConfigOutput) DependableName() []string {
    29  	return []string{n.Name()}
    30  }
    31  
    32  func (n *GraphNodeConfigOutput) DependentOn() []string {
    33  	vars := n.Output.RawConfig.Variables
    34  	result := make([]string, 0, len(vars))
    35  	for _, v := range vars {
    36  		if vn := varNameForVar(v); vn != "" {
    37  			result = append(result, vn)
    38  		}
    39  	}
    40  
    41  	return result
    42  }
    43  
    44  // GraphNodeEvalable impl.
    45  func (n *GraphNodeConfigOutput) EvalTree() EvalNode {
    46  	return &EvalOpFilter{
    47  		Ops: []walkOperation{walkRefresh, walkPlan, walkApply,
    48  			walkDestroy, walkInput, walkValidate},
    49  		Node: &EvalSequence{
    50  			Nodes: []EvalNode{
    51  				&EvalWriteOutput{
    52  					Name:      n.Output.Name,
    53  					Sensitive: n.Output.Sensitive,
    54  					Value:     n.Output.RawConfig,
    55  				},
    56  			},
    57  		},
    58  	}
    59  }
    60  
    61  // GraphNodeProxy impl.
    62  func (n *GraphNodeConfigOutput) Proxy() bool {
    63  	return true
    64  }
    65  
    66  // GraphNodeDestroyEdgeInclude impl.
    67  func (n *GraphNodeConfigOutput) DestroyEdgeInclude(dag.Vertex) bool {
    68  	return false
    69  }
    70  
    71  // GraphNodeFlattenable impl.
    72  func (n *GraphNodeConfigOutput) Flatten(p []string) (dag.Vertex, error) {
    73  	return &GraphNodeConfigOutputFlat{
    74  		GraphNodeConfigOutput: n,
    75  		PathValue:             p,
    76  	}, nil
    77  }
    78  
    79  // Same as GraphNodeConfigOutput, but for flattening
    80  type GraphNodeConfigOutputFlat struct {
    81  	*GraphNodeConfigOutput
    82  
    83  	PathValue []string
    84  }
    85  
    86  func (n *GraphNodeConfigOutputFlat) Name() string {
    87  	return fmt.Sprintf(
    88  		"%s.%s", modulePrefixStr(n.PathValue), n.GraphNodeConfigOutput.Name())
    89  }
    90  
    91  func (n *GraphNodeConfigOutputFlat) Path() []string {
    92  	return n.PathValue
    93  }
    94  
    95  func (n *GraphNodeConfigOutputFlat) DependableName() []string {
    96  	return modulePrefixList(
    97  		n.GraphNodeConfigOutput.DependableName(),
    98  		modulePrefixStr(n.PathValue))
    99  }
   100  
   101  func (n *GraphNodeConfigOutputFlat) DependentOn() []string {
   102  	prefix := modulePrefixStr(n.PathValue)
   103  	return modulePrefixList(
   104  		n.GraphNodeConfigOutput.DependentOn(),
   105  		prefix)
   106  }