Skip to main content

Command: apply

The tofu apply command executes the actions proposed in a OpenTofu plan.

Usage

Usage: tofu apply [options] [plan file]

Automatic Plan Mode

When you run tofu apply without passing a saved plan file, OpenTofu automatically creates a new execution plan as if you had run tofu plan, prompts you to approve that plan, and takes the indicated actions. You can use all of the planning modes and planning options to customize how OpenTofu will create the plan.

You can pass the -auto-approve option to instruct OpenTofu to apply the plan without asking for confirmation.

Saved Plan Mode

When you pass a saved plan file to tofu apply, OpenTofu takes the actions in the saved plan without prompting you for confirmation. You may want to use this two-step workflow when running OpenTofu in automation.

Use tofu show to inspect a saved plan file before applying it.

When using a saved plan, you cannot specify any additional planning modes or options. These options only affect OpenTofu's decisions about which actions to take, and the plan file contains the final results of those decisions.

Plan Options

Without a saved plan file, tofu apply supports all planning modes and planning options available for tofu plan.

  • Planning Modes: These include -destroy, which creates a plan to destroy all remote objects, and -refresh-only, which creates a plan to update OpenTofu state and root module output values.
  • Planning Options: These include specifying which resource instances OpenTofu should replace, setting OpenTofu input variables, etc.

Apply Options

The following options change how the apply command executes and reports on the apply operation.

  • -auto-approve - Skips interactive approval of plan before applying. This option is ignored when you pass a previously-saved plan file, because OpenTofu considers you passing the plan file as the approval and so will never prompt in that case.

  • -compact-warnings - Shows any warning messages in a compact form which includes only the summary messages, unless the warnings are accompanied by at least one error and thus the warning text might be useful context for the errors.

  • -input=false - Disables all of OpenTofu's interactive prompts. Note that this also prevents OpenTofu from prompting for interactive approval of a plan, so OpenTofu will conservatively assume that you do not wish to apply the plan, causing the operation to fail.

  • -json - Enables the machine readable JSON UI output. This implies -input=false, so the configuration must have no unassigned variable values to continue. To enable this flag, you must also either enable the -auto-approve flag or specify a previously-saved plan.

  • -lock=false - Don't hold a state lock during the operation. This is dangerous if others might concurrently run commands against the same workspace.

  • -lock-timeout=DURATION - Unless locking is disabled with -lock=false, instructs OpenTofu to retry acquiring a lock for a period of time before returning an error. The duration syntax is a number followed by a time unit letter, such as "3s" for three seconds.

  • -no-color - Disables terminal formatting sequences in the output. Use this if you are running OpenTofu in a context where its output will be rendered by a system that cannot interpret terminal formatting.

  • -parallelism=n - Limit the number of concurrent operation as OpenTofu walks the graph. Defaults to 10.

  • All planning modes and planning options for tofu plan - Customize how OpenTofu will create the plan. Only available when you run tofu apply without a saved plan file.

For configurations using the local backend only, tofu apply also accepts the legacy options -state, -state-out, and -backup.

Environment variables

You can further customize behavior of apply command by using environment variables. For example, the TF_STATE_PERSIST_INTERVAL environment variable allows to specify the interval between state persistence.

Passing a Different Configuration Directory

If your workflow relies on overriding the root module directory, use the -chdir global option instead, which works across all commands and makes OpenTofu consistently look in the given directory for all files it would normally read or write in the current working directory.