terraform: remove old variable node
This commit is contained in:
parent
513ff88859
commit
37294d5ad2
|
@ -1,174 +0,0 @@
|
|||
package terraform
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/hashicorp/terraform/config"
|
||||
"github.com/hashicorp/terraform/config/module"
|
||||
"github.com/hashicorp/terraform/dag"
|
||||
)
|
||||
|
||||
// GraphNodeConfigVariable represents a Variable in the config.
|
||||
type GraphNodeConfigVariable struct {
|
||||
Variable *config.Variable
|
||||
|
||||
// Value, if non-nil, will be used to set the value of the variable
|
||||
// during evaluation. If this is nil, evaluation will do nothing.
|
||||
//
|
||||
// Module is the name of the module to set the variables on.
|
||||
Module string
|
||||
Value *config.RawConfig
|
||||
|
||||
ModuleTree *module.Tree
|
||||
ModulePath []string
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariable) Name() string {
|
||||
return fmt.Sprintf("var.%s", n.Variable.Name)
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariable) DependableName() []string {
|
||||
return []string{n.Name()}
|
||||
}
|
||||
|
||||
// RemoveIfNotTargeted implements RemovableIfNotTargeted.
|
||||
// When targeting is active, variables that are not targeted should be removed
|
||||
// from the graph, because otherwise module variables trying to interpolate
|
||||
// their references can fail when they're missing the referent resource node.
|
||||
func (n *GraphNodeConfigVariable) RemoveIfNotTargeted() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariable) DependentOn() []string {
|
||||
// If we don't have any value set, we don't depend on anything
|
||||
if n.Value == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get what we depend on based on our value
|
||||
vars := n.Value.Variables
|
||||
result := make([]string, 0, len(vars))
|
||||
for _, v := range vars {
|
||||
if vn := varNameForVar(v); vn != "" {
|
||||
result = append(result, vn)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariable) VariableName() string {
|
||||
return n.Variable.Name
|
||||
}
|
||||
|
||||
// GraphNodeDestroyEdgeInclude impl.
|
||||
func (n *GraphNodeConfigVariable) DestroyEdgeInclude(v dag.Vertex) bool {
|
||||
// Only include this variable in a destroy edge if the source vertex
|
||||
// "v" has a count dependency on this variable.
|
||||
log.Printf("[DEBUG] DestroyEdgeInclude: Checking: %s", dag.VertexName(v))
|
||||
cv, ok := v.(GraphNodeCountDependent)
|
||||
if !ok {
|
||||
log.Printf("[DEBUG] DestroyEdgeInclude: Not GraphNodeCountDependent: %s", dag.VertexName(v))
|
||||
return false
|
||||
}
|
||||
|
||||
for _, d := range cv.CountDependentOn() {
|
||||
for _, d2 := range n.DependableName() {
|
||||
log.Printf("[DEBUG] DestroyEdgeInclude: d = %s : d2 = %s", d, d2)
|
||||
if d == d2 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// GraphNodeEvalable impl.
|
||||
func (n *GraphNodeConfigVariable) EvalTree() EvalNode {
|
||||
// If we have no value, do nothing
|
||||
if n.Value == nil {
|
||||
return &EvalNoop{}
|
||||
}
|
||||
|
||||
// Otherwise, interpolate the value of this variable and set it
|
||||
// within the variables mapping.
|
||||
var config *ResourceConfig
|
||||
variables := make(map[string]interface{})
|
||||
return &EvalSequence{
|
||||
Nodes: []EvalNode{
|
||||
&EvalInterpolate{
|
||||
Config: n.Value,
|
||||
Output: &config,
|
||||
},
|
||||
|
||||
&EvalVariableBlock{
|
||||
Config: &config,
|
||||
VariableValues: variables,
|
||||
},
|
||||
|
||||
&EvalCoerceMapVariable{
|
||||
Variables: variables,
|
||||
ModulePath: n.ModulePath,
|
||||
ModuleTree: n.ModuleTree,
|
||||
},
|
||||
|
||||
&EvalTypeCheckVariable{
|
||||
Variables: variables,
|
||||
ModulePath: n.ModulePath,
|
||||
ModuleTree: n.ModuleTree,
|
||||
},
|
||||
|
||||
&EvalSetVariables{
|
||||
Module: &n.Module,
|
||||
Variables: variables,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// GraphNodeFlattenable impl.
|
||||
func (n *GraphNodeConfigVariable) Flatten(p []string) (dag.Vertex, error) {
|
||||
return &GraphNodeConfigVariableFlat{
|
||||
GraphNodeConfigVariable: n,
|
||||
PathValue: p,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type GraphNodeConfigVariableFlat struct {
|
||||
*GraphNodeConfigVariable
|
||||
|
||||
PathValue []string
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariableFlat) Name() string {
|
||||
return fmt.Sprintf(
|
||||
"%s.%s", modulePrefixStr(n.PathValue), n.GraphNodeConfigVariable.Name())
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariableFlat) DependableName() []string {
|
||||
return []string{n.Name()}
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariableFlat) DependentOn() []string {
|
||||
// We only wrap the dependencies and such if we have a path that is
|
||||
// longer than 2 elements (root, child, more). This is because when
|
||||
// flattened, variables can point outside the graph.
|
||||
prefix := ""
|
||||
if len(n.PathValue) > 2 {
|
||||
prefix = modulePrefixStr(n.PathValue[:len(n.PathValue)-1])
|
||||
}
|
||||
|
||||
return modulePrefixList(
|
||||
n.GraphNodeConfigVariable.DependentOn(),
|
||||
prefix)
|
||||
}
|
||||
|
||||
func (n *GraphNodeConfigVariableFlat) Path() []string {
|
||||
if len(n.PathValue) > 2 {
|
||||
return n.PathValue[:len(n.PathValue)-1]
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package terraform
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/dag"
|
||||
)
|
||||
|
||||
func TestGraphNodeConfigVariable_impl(t *testing.T) {
|
||||
var _ dag.Vertex = new(GraphNodeConfigVariable)
|
||||
var _ dag.NamedVertex = new(GraphNodeConfigVariable)
|
||||
var _ graphNodeConfig = new(GraphNodeConfigVariable)
|
||||
}
|
||||
|
||||
func TestGraphNodeConfigVariableFlat_impl(t *testing.T) {
|
||||
var _ dag.Vertex = new(GraphNodeConfigVariableFlat)
|
||||
var _ dag.NamedVertex = new(GraphNodeConfigVariableFlat)
|
||||
var _ graphNodeConfig = new(GraphNodeConfigVariableFlat)
|
||||
}
|
|
@ -90,15 +90,6 @@ func (t *TargetsTransformer) selectTargetedNodes(
|
|||
var err error
|
||||
if t.Destroy {
|
||||
deps, err = g.Descendents(v)
|
||||
|
||||
// Select any variables that we depend on in case we need them later for
|
||||
// interpolating in the count
|
||||
ancestors, _ := g.Ancestors(v)
|
||||
for _, a := range ancestors.List() {
|
||||
if _, ok := a.(*GraphNodeConfigVariableFlat); ok {
|
||||
deps.Add(a)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
deps, err = g.Ancestors(v)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue