// Copyright (c) The OpenTofu Authors // SPDX-License-Identifier: MPL-2.0 // Copyright (c) 2023 HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package tofu import ( "context" "github.com/opentofu/opentofu/internal/addrs" "github.com/opentofu/opentofu/internal/configs" "github.com/opentofu/opentofu/internal/dag" ) // RootVariableTransformer is a GraphTransformer that adds all the root // variables to the graph. // // Root variables are currently no-ops but they must be added to the // graph since downstream things that depend on them must be able to // reach them. type RootVariableTransformer struct { Config *configs.Config RawValues InputValues } func (t *RootVariableTransformer) Transform(_ context.Context, g *Graph) error { // We can have no variables if we have no config. if t.Config == nil { return nil } // We're only considering root module variables here, since child // module variables are handled by ModuleVariableTransformer. vars := t.Config.Module.Variables // Add all variables here for _, v := range vars { node := &NodeRootVariable{ Addr: addrs.InputVariable{ Name: v.Name, }, Config: v, RawValue: t.RawValues[v.Name], } g.Add(node) ref := &nodeVariableReference{ Addr: addrs.InputVariable{ Name: v.Name, }, Config: v, } g.Add(ref) // Input must be available before reference is valid g.Connect(dag.BasicEdge(ref, node)) } return nil }