107 lines
2.4 KiB
Go
107 lines
2.4 KiB
Go
package terraform
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/terraform/config"
|
|
"github.com/hashicorp/terraform/dag"
|
|
)
|
|
|
|
// GraphNodeConfigOutput represents an output configured within the
|
|
// configuration.
|
|
type GraphNodeConfigOutput struct {
|
|
Output *config.Output
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutput) Name() string {
|
|
return fmt.Sprintf("output.%s", n.Output.Name)
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutput) ConfigType() GraphNodeConfigType {
|
|
return GraphNodeConfigTypeOutput
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutput) OutputName() string {
|
|
return n.Output.Name
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutput) DependableName() []string {
|
|
return []string{n.Name()}
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutput) DependentOn() []string {
|
|
vars := n.Output.RawConfig.Variables
|
|
result := make([]string, 0, len(vars))
|
|
for _, v := range vars {
|
|
if vn := varNameForVar(v); vn != "" {
|
|
result = append(result, vn)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// GraphNodeEvalable impl.
|
|
func (n *GraphNodeConfigOutput) EvalTree() EvalNode {
|
|
return &EvalOpFilter{
|
|
Ops: []walkOperation{walkRefresh, walkPlan, walkApply,
|
|
walkDestroy, walkInput, walkValidate},
|
|
Node: &EvalSequence{
|
|
Nodes: []EvalNode{
|
|
&EvalWriteOutput{
|
|
Name: n.Output.Name,
|
|
Sensitive: n.Output.Sensitive,
|
|
Value: n.Output.RawConfig,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// GraphNodeProxy impl.
|
|
func (n *GraphNodeConfigOutput) Proxy() bool {
|
|
return true
|
|
}
|
|
|
|
// GraphNodeDestroyEdgeInclude impl.
|
|
func (n *GraphNodeConfigOutput) DestroyEdgeInclude(dag.Vertex) bool {
|
|
return false
|
|
}
|
|
|
|
// GraphNodeFlattenable impl.
|
|
func (n *GraphNodeConfigOutput) Flatten(p []string) (dag.Vertex, error) {
|
|
return &GraphNodeConfigOutputFlat{
|
|
GraphNodeConfigOutput: n,
|
|
PathValue: p,
|
|
}, nil
|
|
}
|
|
|
|
// Same as GraphNodeConfigOutput, but for flattening
|
|
type GraphNodeConfigOutputFlat struct {
|
|
*GraphNodeConfigOutput
|
|
|
|
PathValue []string
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutputFlat) Name() string {
|
|
return fmt.Sprintf(
|
|
"%s.%s", modulePrefixStr(n.PathValue), n.GraphNodeConfigOutput.Name())
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutputFlat) Path() []string {
|
|
return n.PathValue
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutputFlat) DependableName() []string {
|
|
return modulePrefixList(
|
|
n.GraphNodeConfigOutput.DependableName(),
|
|
modulePrefixStr(n.PathValue))
|
|
}
|
|
|
|
func (n *GraphNodeConfigOutputFlat) DependentOn() []string {
|
|
prefix := modulePrefixStr(n.PathValue)
|
|
return modulePrefixList(
|
|
n.GraphNodeConfigOutput.DependentOn(),
|
|
prefix)
|
|
}
|