core: Remove module input transformer
The nodes it adds were immediately skipped by flattening and therefore never had any effect. That makes the transformer effectively dead code and removable. This was the only usage of FlattenSkip so we can remove that as well.
This commit is contained in:
parent
012d06489f
commit
d992f8d52d
|
@ -57,12 +57,6 @@ func (n *GraphNodeConfigModule) Expand(b GraphBuilder) (GraphNodeSubgraph, error
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the parameters node to the module
|
|
||||||
t := &ModuleInputTransformer{Variables: make(map[string]string)}
|
|
||||||
if err := t.Transform(graph); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// Add the destroy marker to the graph
|
// Add the destroy marker to the graph
|
||||||
t := &ModuleDestroyTransformer{}
|
t := &ModuleDestroyTransformer{}
|
||||||
|
@ -75,7 +69,7 @@ func (n *GraphNodeConfigModule) Expand(b GraphBuilder) (GraphNodeSubgraph, error
|
||||||
return &graphNodeModuleExpanded{
|
return &graphNodeModuleExpanded{
|
||||||
Original: n,
|
Original: n,
|
||||||
Graph: graph,
|
Graph: graph,
|
||||||
Variables: t.Variables,
|
Variables: make(map[string]string),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,11 +163,6 @@ func (n *graphNodeModuleExpanded) FlattenGraph() *Graph {
|
||||||
// flattening. We have to skip some nodes (graphNodeModuleSkippable)
|
// flattening. We have to skip some nodes (graphNodeModuleSkippable)
|
||||||
// as well as setup the variable values.
|
// as well as setup the variable values.
|
||||||
for _, v := range graph.Vertices() {
|
for _, v := range graph.Vertices() {
|
||||||
if sn, ok := v.(graphNodeModuleSkippable); ok && sn.FlattenSkip() {
|
|
||||||
graph.Remove(v)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// If this is a variable, then look it up in the raw configuration.
|
// If this is a variable, then look it up in the raw configuration.
|
||||||
// If it exists in the raw configuration, set the value of it.
|
// If it exists in the raw configuration, set the value of it.
|
||||||
if vn, ok := v.(*GraphNodeConfigVariable); ok && input != nil {
|
if vn, ok := v.(*GraphNodeConfigVariable); ok && input != nil {
|
||||||
|
@ -204,12 +193,6 @@ func (n *graphNodeModuleExpanded) Subgraph() *Graph {
|
||||||
return n.Graph
|
return n.Graph
|
||||||
}
|
}
|
||||||
|
|
||||||
// This interface can be implemented to be skipped/ignored when
|
|
||||||
// flattening the module graph.
|
|
||||||
type graphNodeModuleSkippable interface {
|
|
||||||
FlattenSkip() bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func modulePrefixStr(p []string) string {
|
func modulePrefixStr(p []string) string {
|
||||||
parts := make([]string, 0, len(p)*2)
|
parts := make([]string, 0, len(p)*2)
|
||||||
for _, p := range p[1:] {
|
for _, p := range p[1:] {
|
||||||
|
|
|
@ -71,8 +71,6 @@ const testGraphNodeModuleExpandStr = `
|
||||||
aws_instance.bar
|
aws_instance.bar
|
||||||
aws_instance.foo
|
aws_instance.foo
|
||||||
aws_instance.foo
|
aws_instance.foo
|
||||||
module inputs
|
|
||||||
module inputs
|
|
||||||
plan-destroy
|
plan-destroy
|
||||||
`
|
`
|
||||||
|
|
||||||
|
|
|
@ -2,38 +2,10 @@ package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/dag"
|
"github.com/hashicorp/terraform/dag"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ModuleInputTransformer is a GraphTransformer that adds a node to the
|
|
||||||
// graph for setting the module input variables for the remainder of the
|
|
||||||
// graph.
|
|
||||||
type ModuleInputTransformer struct {
|
|
||||||
Variables map[string]string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *ModuleInputTransformer) Transform(g *Graph) error {
|
|
||||||
// Create the node
|
|
||||||
n := &graphNodeModuleInput{Variables: t.Variables}
|
|
||||||
|
|
||||||
// Add it to the graph
|
|
||||||
g.Add(n)
|
|
||||||
|
|
||||||
// Connect the inputs to the bottom of the graph so that it happens
|
|
||||||
// first.
|
|
||||||
for _, v := range g.Vertices() {
|
|
||||||
if v == n {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if g.DownEdges(v).Len() == 0 {
|
|
||||||
g.Connect(dag.BasicEdge(v, n))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ModuleDestroyTransformer is a GraphTransformer that adds a node
|
// ModuleDestroyTransformer is a GraphTransformer that adds a node
|
||||||
// to the graph that will just mark the full module for destroy in
|
// to the graph that will just mark the full module for destroy in
|
||||||
// the destroy scenario.
|
// the destroy scenario.
|
||||||
|
@ -88,21 +60,3 @@ func (n *graphNodeModuleDestroyFlat) Name() string {
|
||||||
func (n *graphNodeModuleDestroyFlat) Path() []string {
|
func (n *graphNodeModuleDestroyFlat) Path() []string {
|
||||||
return n.PathValue
|
return n.PathValue
|
||||||
}
|
}
|
||||||
|
|
||||||
type graphNodeModuleInput struct {
|
|
||||||
Variables map[string]string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *graphNodeModuleInput) Name() string {
|
|
||||||
return "module inputs"
|
|
||||||
}
|
|
||||||
|
|
||||||
// GraphNodeEvalable impl.
|
|
||||||
func (n *graphNodeModuleInput) EvalTree() EvalNode {
|
|
||||||
return &EvalSetVariables{Variables: n.Variables}
|
|
||||||
}
|
|
||||||
|
|
||||||
// graphNodeModuleSkippable impl.
|
|
||||||
func (n *graphNodeModuleInput) FlattenSkip() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,41 +1 @@
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/dag"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestModuleInputTransformer(t *testing.T) {
|
|
||||||
var g Graph
|
|
||||||
g.Add(1)
|
|
||||||
g.Add(2)
|
|
||||||
g.Add(3)
|
|
||||||
g.Connect(dag.BasicEdge(1, 2))
|
|
||||||
g.Connect(dag.BasicEdge(1, 3))
|
|
||||||
|
|
||||||
{
|
|
||||||
tf := &ModuleInputTransformer{}
|
|
||||||
if err := tf.Transform(&g); err != nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
actual := strings.TrimSpace(g.String())
|
|
||||||
expected := strings.TrimSpace(testModuleInputTransformStr)
|
|
||||||
if actual != expected {
|
|
||||||
t.Fatalf("bad:\n\n%s", actual)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const testModuleInputTransformStr = `
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
2
|
|
||||||
module inputs
|
|
||||||
3
|
|
||||||
module inputs
|
|
||||||
module inputs
|
|
||||||
`
|
|
||||||
|
|
Loading…
Reference in New Issue