mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-29 10:21:01 -06:00
ab9a2935ce
Using this in the same manner as NodePlannableOutput, which expands the local values within modules. All thee output and local types are used in both plan and apply, we may rename these to better reflect their usage in expanding. That wait until we are certain that apply won't need any extra machinery for handling values that aren't stored in the plan.
43 lines
897 B
Go
43 lines
897 B
Go
package terraform
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/addrs"
|
|
"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
|
|
}
|
|
|
|
for _, local := range c.Module.Locals {
|
|
addr := addrs.LocalValue{Name: local.Name}
|
|
node := &NodePlannableLocal{
|
|
Addr: addr,
|
|
Module: c.Path,
|
|
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
|
|
}
|