Skip to main content

Command: destroy

The tofu destroy command is a convenient way to destroy all remote objects managed by a particular OpenTofu configuration.

While you will typically not want to destroy long-lived objects in a production environment, OpenTofu is sometimes used to manage ephemeral infrastructure for development purposes, in which case you can use tofu destroy to conveniently clean up all of those temporary objects once you are finished with your work.

Usage​

Usage: tofu destroy [options]

This command is just a convenience alias for the following command:

Code Block
tofu apply -destroy

For that reason, this command accepts most of the options that tofu apply accepts, although it does not accept a plan file argument and forces the selection of the "destroy" planning mode.

You can also create a speculative destroy plan, to see what the effect of destroying would be, by running the following command:

Code Block
tofu plan -destroy

This will run tofu plan in destroy mode, showing you the proposed destroy changes without executing them.

Forgotten Resources​

When you run tofu destroy, OpenTofu will attempt to destroy all resources managed by the configuration. However, if any resources have the lifecycle.destroy meta-argument set to false, those resources will be "forgotten" instead of destroyed.

When resources are forgotten:

  • They are removed from the OpenTofu state file
  • The actual infrastructure objects remain intact in your cloud provider or remote system
  • The tofu destroy command exits with a non-zero status code to indicate that not all resources were fully removed

This exit code behavior might be important for automation and CI/CD pipelines, as it signals that the destroy operation did not complete as a typical destroy would.