github.com/richardmarshall/terraform@v0.9.5-0.20170429023105-15704cc6ee35/terraform/node_output.go (about) 1 package terraform 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/hashicorp/terraform/config" 8 ) 9 10 // NodeApplyableOutput represents an output that is "applyable": 11 // it is ready to be applied. 12 type NodeApplyableOutput struct { 13 PathValue []string 14 Config *config.Output // Config is the output in the config 15 } 16 17 func (n *NodeApplyableOutput) Name() string { 18 result := fmt.Sprintf("output.%s", n.Config.Name) 19 if len(n.PathValue) > 1 { 20 result = fmt.Sprintf("%s.%s", modulePrefixStr(n.PathValue), result) 21 } 22 23 return result 24 } 25 26 // GraphNodeSubPath 27 func (n *NodeApplyableOutput) Path() []string { 28 return n.PathValue 29 } 30 31 // RemovableIfNotTargeted 32 func (n *NodeApplyableOutput) RemoveIfNotTargeted() bool { 33 // We need to add this so that this node will be removed if 34 // it isn't targeted or a dependency of a target. 35 return true 36 } 37 38 // GraphNodeReferenceable 39 func (n *NodeApplyableOutput) ReferenceableName() []string { 40 name := fmt.Sprintf("output.%s", n.Config.Name) 41 return []string{name} 42 } 43 44 // GraphNodeReferencer 45 func (n *NodeApplyableOutput) References() []string { 46 var result []string 47 result = append(result, n.Config.DependsOn...) 48 result = append(result, ReferencesFromConfig(n.Config.RawConfig)...) 49 for _, v := range result { 50 split := strings.Split(v, "/") 51 for i, s := range split { 52 split[i] = s + ".destroy" 53 } 54 55 result = append(result, strings.Join(split, "/")) 56 } 57 58 return result 59 } 60 61 // GraphNodeEvalable 62 func (n *NodeApplyableOutput) EvalTree() EvalNode { 63 return &EvalOpFilter{ 64 Ops: []walkOperation{walkRefresh, walkPlan, walkApply, 65 walkDestroy, walkInput, walkValidate}, 66 Node: &EvalSequence{ 67 Nodes: []EvalNode{ 68 &EvalWriteOutput{ 69 Name: n.Config.Name, 70 Sensitive: n.Config.Sensitive, 71 Value: n.Config.RawConfig, 72 }, 73 }, 74 }, 75 } 76 }