From 0da10b813bbd783a50dc73a1fa89a0f520ebd362 Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Thu, 24 Jul 2014 18:56:05 -0400 Subject: [PATCH] terraform: fix dot output for meta resources --- terraform/graph_dot.go | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/terraform/graph_dot.go b/terraform/graph_dot.go index 66057dd7df..7b0d0d325a 100644 --- a/terraform/graph_dot.go +++ b/terraform/graph_dot.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/hashicorp/terraform/depgraph" + "github.com/hashicorp/terraform/digraph" ) // GraphDot returns the dot formatting of a visual representation of @@ -141,6 +142,49 @@ func graphDotAddResources(buf *bytes.Buffer, g *depgraph.Graph) { buf.WriteString(edgeBuf.String()) buf.WriteString("\n") } + + // Handle the meta resources + edgeBuf.Reset() + for _, n := range g.Nouns { + _, ok := n.Meta.(*GraphNodeResourceMeta) + if !ok { + continue + } + + // Determine which edges to add + var edges []digraph.Edge + if hasDiff { + for _, e := range n.Edges() { + rn, ok := e.Tail().(*depgraph.Noun).Meta.(*GraphNodeResource) + if !ok { + continue + } + if rn.Resource.Diff == nil || rn.Resource.Diff.Empty() { + continue + } + edges = append(edges, e) + } + } else { + edges = n.Edges() + } + + // Do not draw if we have no edges + if len(edges) == 0 { + continue + } + + for _, e := range edges { + target := e.Tail() + edgeBuf.WriteString(fmt.Sprintf( + "\t\"%s\" -> \"%s\";\n", + n, + target)) + } + } + if edgeBuf.Len() > 0 { + buf.WriteString(edgeBuf.String()) + buf.WriteString("\n") + } } func graphDotAddResourceProviders(buf *bytes.Buffer, g *depgraph.Graph) {