github.com/turtlemonvh/terraform@v0.6.9-0.20151204001754-8e40b6b855e8/terraform/transform_root.go (about)

     1  package terraform
     2  
     3  import "github.com/hashicorp/terraform/dag"
     4  
     5  const rootNodeName = "root"
     6  
     7  // RootTransformer is a GraphTransformer that adds a root to the graph.
     8  type RootTransformer struct{}
     9  
    10  func (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  
    34  type graphNodeRoot struct{}
    35  
    36  func (n graphNodeRoot) Name() string {
    37  	return rootNodeName
    38  }
    39  
    40  func (n graphNodeRoot) Flatten(p []string) (dag.Vertex, error) {
    41  	return n, nil
    42  }