/
transform_local.go
48 lines (40 loc) · 1.24 KB
/
transform_local.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
}