mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-31 11:17:25 -06:00
5b66953d1d
A local value is similar to an output in that it exists only within state and just always evaluates its value as best it can with the current state. Therefore it has a single graph node type for all walks, which will deal with that evaluation operation.
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package terraform
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/hashicorp/terraform/config"
|
|
)
|
|
|
|
// NodeLocal represents a named local value in a particular module.
|
|
//
|
|
// Local value nodes only have one operation, common to all walk types:
|
|
// evaluate the result and place it in state.
|
|
type NodeLocal struct {
|
|
PathValue []string
|
|
Config *config.Local
|
|
}
|
|
|
|
func (n *NodeLocal) Name() string {
|
|
result := fmt.Sprintf("local.%s", n.Config.Name)
|
|
if len(n.PathValue) > 1 {
|
|
result = fmt.Sprintf("%s.%s", modulePrefixStr(n.PathValue), result)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// GraphNodeSubPath
|
|
func (n *NodeLocal) Path() []string {
|
|
return n.PathValue
|
|
}
|
|
|
|
// RemovableIfNotTargeted
|
|
func (n *NodeLocal) RemoveIfNotTargeted() bool {
|
|
return true
|
|
}
|
|
|
|
// GraphNodeReferenceable
|
|
func (n *NodeLocal) ReferenceableName() []string {
|
|
name := fmt.Sprintf("local.%s", n.Config.Name)
|
|
return []string{name}
|
|
}
|
|
|
|
// GraphNodeReferencer
|
|
func (n *NodeLocal) References() []string {
|
|
var result []string
|
|
result = append(result, ReferencesFromConfig(n.Config.RawConfig)...)
|
|
for _, v := range result {
|
|
split := strings.Split(v, "/")
|
|
for i, s := range split {
|
|
split[i] = s + ".destroy"
|
|
}
|
|
|
|
result = append(result, strings.Join(split, "/"))
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// GraphNodeEvalable
|
|
func (n *NodeLocal) EvalTree() EvalNode {
|
|
return &EvalOpFilter{
|
|
Ops: []walkOperation{
|
|
walkInput,
|
|
walkValidate,
|
|
walkRefresh,
|
|
walkPlan,
|
|
walkApply,
|
|
walkDestroy,
|
|
},
|
|
Node: &EvalSequence{
|
|
Nodes: []EvalNode{
|
|
/*&EvalWriteLocal{
|
|
Name: n.Config.Name,
|
|
Value: n.Config.RawConfig,
|
|
},*/
|
|
},
|
|
},
|
|
}
|
|
}
|