terraform: outputs connect properly
This commit is contained in:
parent
7e838dfae2
commit
a0d9bc0f19
|
@ -27,7 +27,7 @@ func (n *GraphNodeConfigModule) DependableName() []string {
|
|||
result := make([]string, 1, len(config.Outputs)+1)
|
||||
result[0] = n.Name()
|
||||
for _, o := range config.Outputs {
|
||||
result = append(result, fmt.Sprintf("%s.%s", n.Name(), o.Name))
|
||||
result = append(result, fmt.Sprintf("%s.output.%s", n.Name(), o.Name))
|
||||
}
|
||||
|
||||
return result
|
||||
|
@ -116,6 +116,16 @@ func (n *graphNodeModuleExpanded) ConfigType() GraphNodeConfigType {
|
|||
return GraphNodeConfigTypeModule
|
||||
}
|
||||
|
||||
// GraphNodeDependable
|
||||
func (n *graphNodeModuleExpanded) DependableName() []string {
|
||||
return n.Original.DependableName()
|
||||
}
|
||||
|
||||
// GraphNodeDependent
|
||||
func (n *graphNodeModuleExpanded) DependentOn() []string {
|
||||
return n.Original.DependentOn()
|
||||
}
|
||||
|
||||
// GraphNodeDotter impl.
|
||||
func (n *graphNodeModuleExpanded) DotNode(name string, opts *GraphDotOpts) *dot.Node {
|
||||
return dot.NewNode(name, map[string]string{
|
||||
|
|
|
@ -3,3 +3,7 @@ variable "var" {}
|
|||
resource "aws_instance" "child" {
|
||||
value = "${var.var}"
|
||||
}
|
||||
|
||||
output "output" {
|
||||
value = "${aws_instance.child.value}"
|
||||
}
|
||||
|
|
|
@ -6,3 +6,7 @@ module "child" {
|
|||
resource "aws_instance" "parent" {
|
||||
value = "foo"
|
||||
}
|
||||
|
||||
resource "aws_instance" "parent-output" {
|
||||
value = "${module.child.output}"
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ func (t *ConfigTransformer) Transform(g *Graph) error {
|
|||
func varNameForVar(raw config.InterpolatedVariable) string {
|
||||
switch v := raw.(type) {
|
||||
case *config.ModuleVariable:
|
||||
return fmt.Sprintf("module.%s.%s", v.Name, v.Field)
|
||||
return fmt.Sprintf("module.%s.output.%s", v.Name, v.Field)
|
||||
case *config.ResourceVariable:
|
||||
return v.ResourceId()
|
||||
case *config.UserVariable:
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package terraform
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/terraform/dag"
|
||||
)
|
||||
|
||||
// GraphNodeFlattenable must be implemented by nodes that can be flattened
|
||||
// into the graph.
|
||||
type GraphNodeFlattenable interface {
|
||||
|
@ -24,6 +28,17 @@ func (t *FlattenTransformer) Transform(g *Graph) error {
|
|||
continue
|
||||
}
|
||||
|
||||
// Get all the things that depend on this node. We'll re-connect
|
||||
// dependents later. We have to copy these here since the UpEdges
|
||||
// value will be deleted after the Remove below.
|
||||
dependents := make([]dag.Vertex, 0, 5)
|
||||
for _, v := range g.UpEdges(v).List() {
|
||||
dependents = append(dependents, v)
|
||||
}
|
||||
|
||||
// Remove the old node
|
||||
g.Remove(v)
|
||||
|
||||
// Flatten the subgraph into this one. Keep any existing
|
||||
// connections that existed.
|
||||
for _, sv := range subgraph.Vertices() {
|
||||
|
@ -33,14 +48,18 @@ func (t *FlattenTransformer) Transform(g *Graph) error {
|
|||
g.Connect(se)
|
||||
}
|
||||
|
||||
// Remove the old node
|
||||
g.Remove(v)
|
||||
|
||||
// Connect the dependencies for all the new nodes that we added.
|
||||
// This will properly connect variables to their sources, for example.
|
||||
for _, sv := range subgraph.Vertices() {
|
||||
g.ConnectDependent(sv)
|
||||
}
|
||||
|
||||
// Re-connect all the things that dependend on the graph
|
||||
// we just flattened. This should connect them back into the
|
||||
// correct nodes if their DependentOn() is setup correctly.
|
||||
for _, v := range dependents {
|
||||
g.ConnectDependent(v)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -37,8 +37,12 @@ func TestFlattenTransformer(t *testing.T) {
|
|||
|
||||
const testTransformFlattenStr = `
|
||||
aws_instance.parent
|
||||
aws_instance.parent-output
|
||||
module.child.output.output
|
||||
module.child.aws_instance.child
|
||||
module.child.var.var
|
||||
module.child.output.output
|
||||
module.child.aws_instance.child
|
||||
module.child.var.var
|
||||
aws_instance.parent
|
||||
`
|
||||
|
|
Loading…
Reference in New Issue