49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package terraform
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/configs"
|
|
)
|
|
|
|
// LocalTransformer is a GraphTransformer that adds all the local values
|
|
// from the configuration to the graph.
|
|
type LocalTransformer struct {
|
|
Config *configs.Config
|
|
}
|
|
|
|
func (t *LocalTransformer) Transform(g *Graph) error {
|
|
return t.transformModule(g, t.Config)
|
|
}
|
|
|
|
func (t *LocalTransformer) transformModule(g *Graph, c *configs.Config) error {
|
|
if c == nil {
|
|
// Can't have any locals if there's no config
|
|
return nil
|
|
}
|
|
|
|
// Our addressing system distinguishes between modules and module instances,
|
|
// but we're not yet ready to make that distinction here (since we don't
|
|
// support "count"/"for_each" on modules) and so we just do a naive
|
|
// transform of the module path into a module instance path, assuming that
|
|
// no keys are in use. This should be removed when "count" and "for_each"
|
|
// are implemented for modules.
|
|
path := c.Path.UnkeyedInstanceShim()
|
|
|
|
for _, local := range c.Module.Locals {
|
|
addr := path.LocalValue(local.Name)
|
|
node := &NodeLocal{
|
|
Addr: addr,
|
|
Config: local,
|
|
}
|
|
g.Add(node)
|
|
}
|
|
|
|
// Also populate locals for child modules
|
|
for _, cc := range c.Children {
|
|
if err := t.transformModule(g, cc); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|