terraform/terraform/transform_root.go

43 lines
788 B
Go
Raw Normal View History

2015-02-05 02:02:18 +01:00
package terraform
import "github.com/hashicorp/terraform/dag"
2015-02-05 02:02:18 +01:00
const rootNodeName = "root"
2015-02-05 02:02:18 +01:00
// RootTransformer is a GraphTransformer that adds a root to the graph.
type RootTransformer struct{}
func (t *RootTransformer) Transform(g *Graph) error {
// If we already have a good root, we're done
if _, err := g.Root(); err == nil {
return nil
}
// Add a root
var root graphNodeRoot
g.Add(root)
// Connect the root to all the edges that need it
for _, v := range g.Vertices() {
if v == root {
continue
}
if g.UpEdges(v).Len() == 0 {
g.Connect(dag.BasicEdge(root, v))
}
}
return nil
}
type graphNodeRoot struct{}
func (n graphNodeRoot) Name() string {
return rootNodeName
2015-02-05 02:02:18 +01:00
}
func (n graphNodeRoot) Flatten(p []string) (dag.Vertex, error) {
return n, nil
}