1package terraform 2 3import "github.com/hashicorp/terraform/dag" 4 5const rootNodeName = "root" 6 7// RootTransformer is a GraphTransformer that adds a root to the graph. 8type RootTransformer struct{} 9 10func (t *RootTransformer) Transform(g *Graph) error { 11 // If we already have a good root, we're done 12 if _, err := g.Root(); err == nil { 13 return nil 14 } 15 16 // Add a root 17 var root graphNodeRoot 18 g.Add(root) 19 20 // Connect the root to all the edges that need it 21 for _, v := range g.Vertices() { 22 if v == root { 23 continue 24 } 25 26 if g.UpEdges(v).Len() == 0 { 27 g.Connect(dag.BasicEdge(root, v)) 28 } 29 } 30 31 return nil 32} 33 34type graphNodeRoot struct{} 35 36func (n graphNodeRoot) Name() string { 37 return rootNodeName 38} 39