docs/src/data/experiments/stack-dependencies.mdx
import Since from '@components/Since.astro'; import Before from '@components/Before.astro'; import { Aside } from '@astrojs/starlight/components';
Support for the autoinclude block in terragrunt.stack.hcl files, enabling dependency relationships and configuration overrides during stack generation.
stack-dependencies - What it doesWhen enabled, this experiment adds support for the autoinclude block nested inside unit and stack blocks in terragrunt.stack.hcl files. The autoinclude block allows users to define dependency blocks and arbitrary configuration that gets generated into a terragrunt.autoinclude.hcl file during stack generation. This file is automatically merged into the unit/stack configuration when parsed.
This experiment enables:
unit.<name>.path and stack.<name>.path variables in terragrunt.stack.hcl for referencing sibling component pathsstack.<name>.<unit_name>.path for referencing individual units within a nested stack (fine-grained dependency)dependency blocks targeting stack directories — aggregated outputs from all units in the stack (dependency.stack_name.outputs.unit_name.output_key)terragrunt.autoinclude.hcl into unit configurations (autoinclude wins)# terragrunt.stack.hcl
unit "vpc" {
source = "../catalog/units/vpc"
path = "vpc"
}
unit "app" {
source = "../catalog/units/app"
path = "app"
autoinclude {
dependency "vpc" {
config_path = unit.vpc.path
}
inputs = {
vpc_id = dependency.vpc.outputs.vpc_id
}
}
}
# terragrunt.stack.hcl
stack "stack_w_outputs" {
source = "../catalog/stacks/stack-w-outputs"
path = "stack-w-outputs"
}
unit "unit_w_inputs" {
source = "../catalog/units/unit-w-inputs"
path = "unit-w-inputs"
autoinclude {
dependency "unit_w_outputs" {
config_path = stack.stack_w_outputs.unit_w_outputs.path
mock_outputs_allowed_terraform_commands = ["plan"]
mock_outputs = {
val = "fake-val"
}
}
inputs = {
val = dependency.unit_w_outputs.outputs.val
}
}
}
# terragrunt.stack.hcl
stack "infra" {
source = "../catalog/stacks/infra"
path = "infra"
}
unit "app" {
source = "../catalog/units/app"
path = "app"
autoinclude {
dependency "infra" {
config_path = stack.infra.path
}
inputs = {
vpc_id = dependency.infra.outputs.vpc.vpc_id
}
}
}
terragrunt run --all --experiment stack-dependencies -- plan
stack-dependencies - How to provide feedbackProvide your feedback on the Stack Dependencies RFC GitHub Issue.
stack-dependencies - Implementation roadmapinternal/hclparse package with two-phase stack file parser and autoinclude data structuresterragrunt.autoinclude.hcl file generator with relative path resolutionlocal.* + dependency.* expressionspkg/config/stack.go stack generation pipelineterragrunt.autoinclude.hcl into unit config during ParseConfig() with deep mergetryGetStackOutput() for dependency blocks targeting stack directoriesExtractAutoIncludeDependencyPaths() so DAG sees dependencies from autoinclude filesstack run apply and stack run destroyautoinclude syntax and merge behaviorinternal/hclparse package with two-phase stack file parser and autoinclude data structuresterragrunt.autoinclude.hcl file generator with relative path resolutionlocal.* + dependency.* expressionspkg/config/stack.go stack generation pipelineterragrunt.autoinclude.hcl into unit config during ParseConfig() with deep mergetryGetStackOutput() for dependency blocks targeting stack directoriesExtractAutoIncludeDependencyPaths() so DAG sees dependencies from autoinclude filesstack run apply and stack run destroyautoinclude syntax and merge behavior