diff --git a/internal/stacks/stackruntime/internal/stackeval/component_config.go b/internal/stacks/stackruntime/internal/stackeval/component_config.go index 88b9086adf..e14f54fb14 100644 --- a/internal/stacks/stackruntime/internal/stackeval/component_config.go +++ b/internal/stacks/stackruntime/internal/stackeval/component_config.go @@ -20,6 +20,7 @@ import ( "github.com/hashicorp/terraform/internal/promising" "github.com/hashicorp/terraform/internal/stacks/stackaddrs" "github.com/hashicorp/terraform/internal/stacks/stackconfig" + "github.com/hashicorp/terraform/internal/stacks/stackplan" "github.com/hashicorp/terraform/internal/tfdiags" "github.com/spf13/afero" "github.com/zclconf/go-cty/cty" @@ -228,8 +229,7 @@ func (c *ComponentConfig) ExprReferenceValue(ctx context.Context, phase EvalPhas return cty.DynamicVal } -// Validate implements Validatable. -func (c *ComponentConfig) Validate(ctx context.Context) tfdiags.Diagnostics { +func (c *ComponentConfig) checkValid(ctx context.Context, phase EvalPhase) tfdiags.Diagnostics { var diags tfdiags.Diagnostics _, moreDiags := c.CheckModuleTree(ctx) @@ -238,6 +238,16 @@ func (c *ComponentConfig) Validate(ctx context.Context) tfdiags.Diagnostics { return diags } +// Validate implements Validatable. +func (c *ComponentConfig) Validate(ctx context.Context) tfdiags.Diagnostics { + return c.checkValid(ctx, ValidatePhase) +} + +// PlanChanges implements Plannable. +func (c *ComponentConfig) PlanChanges(ctx context.Context) ([]stackplan.PlannedChange, tfdiags.Diagnostics) { + return nil, c.checkValid(ctx, PlanPhase) +} + func (c *ComponentConfig) tracingName() string { return c.Addr().String() } diff --git a/internal/stacks/stackruntime/internal/stackeval/stack_config.go b/internal/stacks/stackruntime/internal/stackeval/stack_config.go index 1e22ad6b20..b012eb2eb7 100644 --- a/internal/stacks/stackruntime/internal/stackeval/stack_config.go +++ b/internal/stacks/stackruntime/internal/stackeval/stack_config.go @@ -303,7 +303,7 @@ func (s *StackConfig) Components(ctx context.Context) map[stackaddrs.Component]* return nil } ret := make(map[stackaddrs.Component]*ComponentConfig, len(s.config.Stack.Components)) - for name := range s.config.Stack.InputVariables { + for name := range s.config.Stack.Components { addr := stackaddrs.Component{Name: name} ret[addr] = s.Component(ctx, addr) } diff --git a/internal/stacks/stackruntime/internal/stackeval/walk_static.go b/internal/stacks/stackruntime/internal/stackeval/walk_static.go index ad96e0c8e4..d23469f2dc 100644 --- a/internal/stacks/stackruntime/internal/stackeval/walk_static.go +++ b/internal/stacks/stackruntime/internal/stackeval/walk_static.go @@ -53,6 +53,10 @@ func walkStaticObjectsInStackConfig[Output any]( // TODO: All of the other static object types + for _, obj := range stackConfig.Components(ctx) { + visit(ctx, walk, obj) + } + for _, obj := range stackConfig.StackCalls(ctx) { visit(ctx, walk, obj) }