| 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 |
| } |