-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
On the road to the first major release of Terragrunt 1.0, some breaking changes will take place that remove functionality in Terragrunt.
While features will primarily be introduced as backwards compatible, deprecated features will be gradually removed leading up to 1.0, and remain supported until the next major version, 2.0. More on this can be found here, in the CLI Redesign RFC.
Note that users can also leverage Strict Mode to opt-in to these breaking changes before they occur to confirm that they are ready to adopt the releases where the changes take place. All deprecated functionality will be introduced to a strict mode control before it is fully removed to give users the chance to try out the removal preemptively.
The items listed below will be listed in order of their eventual removal. Initially, they will be listed with To Be Decided (TBD) deadlines for their removal, but as we get closer to 1.0, they will be scheduled, and removed slowly.
This is a living document. If you have concerns or would like to request that the order or deadline for feature removal change, please share your feedback. More may be added to this schedule as we get closer to 1.0.
Removal Schedule
This is a tentative schedule, subject to change based on community feedback:
- Removal of longstanding deprecated commands (e.g.
plan-all
) - 0.84.0: 2025/08/01 - Removal of legacy Terragrunt flags (all flags that start with
terragrunt-
) - x.y.z: 2025/08/15 - Removal of backend provisioning as default behavior - x.y.z: 2025/09/01
- Removal of command forwarding by default - x.y.z: 2025/09/15
- Removal of deprecated commands (e.g.
terragrunt-info
) - x.y.z: 2025/10/01 - Removal of behavior where inputs are read from dependencies - x.y.z: 2025/10/15
- Removal of deprecated runtime controls (
skip
,retryable_errors
) - x.y.z: 2025/11/01
Removed Features
The following is a breakdown of the items listed above, and why they are being removed.
Removal of longstanding deprecated commands
For quite a long time, commands like plan-all
have been deprecated in favor of the run-all
command (which has since been replaced with run --all
), and can be used in combination with other commands like plan
, apply
, etc instead of a dedicated command.
If you are currently using commands like the following:
$ terragrunt plan-all
You'll want to use the following instead:
$ terragrunt run --all plan
Removal of legacy Terragrunt flags
As discussed here, by 1.0, Terragrunt users will no longer have to use flags named with a terragrunt-
prefix for every flag.
There is now a new, corresponding, flag for every legacy terragrunt-
prefixed flag, the run
and exec
commands are introduced, and the terragrunt-
prefixed flags will no longer be necessary.
If you are currently using flags like this:
$ terragrunt plan --terragrunt-non-interactive
You'll want to use the following instead:
$ terragrunt plan --non-interactive
You can learn more about these changes here.
Removal of backend provisioning as default behavior
As discussed here, the current default behavior of Terragrunt whereby backend resource provisioning is attempted by default is not desirable, and better alternatives exist.
Now that the backend
command is available, along with the --backend-bootstrap
flag, doing this by default is now deprecated.
If you currently expect the following to automatically provision backend resources on your behalf before running:
$ terragrunt plan --non-interactive
You'll want to use the following flag to retain that behavior:
$ terragrunt plan --backend-bootstrap --non-interactive
You can learn more about this here.
Removal of command forwarding by default
As discussed here, the current default behavior of Terragrunt forwarding all commands to OpenTofu/Terraform when they are not native commands in Terragrunt causes a lot of confusion and errors for users.
Now that the run
command is available, along with dedicated OpenTofu command shortcuts, this behavior is now deprecated.
If you are currently using commands like the following (where you're expecting anything you pass to Terragrunt to be forwarded to OpenTofu/Terraform by default):
$ terragrunt workspace ls
You'll want to replace that usage with the run
command like this:
$ terragrunt run -- workspace ls
You can learn more about this here.
Removal of deprecated commands
As discussed here, there are numerous instances where existing, infrequently used commands in Terragrunt have been restructured into a better organized, more consistent system.
Now that these commands are introduced to make the existing commands deprecated, legacy commands like terragrunt-info
are deprecated.
If you are currently using commands like:
$ terragrunt hclfmt
You'll want to replace that usage with commands like this:
$ terragrunt hcl fmt
You can learn more about this (including the full list of commands that have been renamed) here.
Removal of behavior where inputs are read from dependencies
As discussed here, the current default behavior of Terragrunt where dependencies expose their inputs as accessible values slows Terragrunt configuration parsing significantly.
If you are currently accessing the inputs of dependencies like this:
dependency "foo" {
config_path = "../foo"
}
inputs = {
my_input = dependency.foo.inputs.an_input_from_foo
}
You'll want to adjust your usage so that you access outputs instead like this:
dependency "foo" {
config_path = "../foo"
}
inputs = {
my_input = dependency.foo.outputs.an_output_from_foo
}
You can learn more about this here.
Removal of deprecated runtime controls
The attributes retryable_errors
and skip
have been deprecated in favor of configurations errors
and exclude
respectively.
If you are currently using configurations like this:
skip = true
retryable_errors = [
".*Error: transient network issue.*"
]
You'll want to use configurations like this instead:
exclude {
if = true
actions = ["all"]
}
errors {
# Retry block for transient errors
retry "transient_errors" {
retryable_errors = [".*Error: transient network issue.*"]
max_attempts = 3
sleep_interval_sec = 5
}
}
You can learn more about the new configurations here.