Skip to content

Commit 0da10b8

Browse files
committed
terraform: fix dot output for meta resources
1 parent 11b4ebe commit 0da10b8

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

terraform/graph_dot.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
"github.com/hashicorp/terraform/depgraph"
8+
"github.com/hashicorp/terraform/digraph"
89
)
910

1011
// GraphDot returns the dot formatting of a visual representation of
@@ -141,6 +142,49 @@ func graphDotAddResources(buf *bytes.Buffer, g *depgraph.Graph) {
141142
buf.WriteString(edgeBuf.String())
142143
buf.WriteString("\n")
143144
}
145+
146+
// Handle the meta resources
147+
edgeBuf.Reset()
148+
for _, n := range g.Nouns {
149+
_, ok := n.Meta.(*GraphNodeResourceMeta)
150+
if !ok {
151+
continue
152+
}
153+
154+
// Determine which edges to add
155+
var edges []digraph.Edge
156+
if hasDiff {
157+
for _, e := range n.Edges() {
158+
rn, ok := e.Tail().(*depgraph.Noun).Meta.(*GraphNodeResource)
159+
if !ok {
160+
continue
161+
}
162+
if rn.Resource.Diff == nil || rn.Resource.Diff.Empty() {
163+
continue
164+
}
165+
edges = append(edges, e)
166+
}
167+
} else {
168+
edges = n.Edges()
169+
}
170+
171+
// Do not draw if we have no edges
172+
if len(edges) == 0 {
173+
continue
174+
}
175+
176+
for _, e := range edges {
177+
target := e.Tail()
178+
edgeBuf.WriteString(fmt.Sprintf(
179+
"\t\"%s\" -> \"%s\";\n",
180+
n,
181+
target))
182+
}
183+
}
184+
if edgeBuf.Len() > 0 {
185+
buf.WriteString(edgeBuf.String())
186+
buf.WriteString("\n")
187+
}
144188
}
145189

146190
func graphDotAddResourceProviders(buf *bytes.Buffer, g *depgraph.Graph) {

0 commit comments

Comments
 (0)