github.com/hashicorp/terraform-plugin-sdk@v1.17.2/terraform/transform_local.go (about)

     1  package terraform
     2  
     3  import (
     4  	"github.com/hashicorp/terraform-plugin-sdk/internal/configs"
     5  )
     6  
     7  // LocalTransformer is a GraphTransformer that adds all the local values
     8  // from the configuration to the graph.
     9  type LocalTransformer struct {
    10  	Config *configs.Config
    11  }
    12  
    13  func (t *LocalTransformer) Transform(g *Graph) error {
    14  	return t.transformModule(g, t.Config)
    15  }
    16  
    17  func (t *LocalTransformer) transformModule(g *Graph, c *configs.Config) error {
    18  	if c == nil {
    19  		// Can't have any locals if there's no config
    20  		return nil
    21  	}
    22  
    23  	// Our addressing system distinguishes between modules and module instances,
    24  	// but we're not yet ready to make that distinction here (since we don't
    25  	// support "count"/"for_each" on modules) and so we just do a naive
    26  	// transform of the module path into a module instance path, assuming that
    27  	// no keys are in use. This should be removed when "count" and "for_each"
    28  	// are implemented for modules.
    29  	path := c.Path.UnkeyedInstanceShim()
    30  
    31  	for _, local := range c.Module.Locals {
    32  		addr := path.LocalValue(local.Name)
    33  		node := &NodeLocal{
    34  			Addr:   addr,
    35  			Config: local,
    36  		}
    37  		g.Add(node)
    38  	}
    39  
    40  	// Also populate locals for child modules
    41  	for _, cc := range c.Children {
    42  		if err := t.transformModule(g, cc); err != nil {
    43  			return err
    44  		}
    45  	}
    46  
    47  	return nil
    48  }