Files
opentf/website/docs/cli/commands/destroy.mdx
2025-12-16 15:41:03 +04:00

73 lines
2.7 KiB
Plaintext

---
description: >-
The tofu destroy command destroys all objects managed by a OpenTofu
configuration.
---
# 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:
```
tofu apply -destroy
```
For that reason, this command accepts most of the options that
[`tofu apply`](../commands/apply.mdx) 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:
```
tofu plan -destroy
```
This will run [`tofu plan`](plan.mdx) in _destroy_ mode, showing
you the proposed destroy changes without executing them.
## Forgotten Resources
<span id="forgotten-resources"></span>
When you run `tofu destroy`, OpenTofu will attempt to destroy all resources
managed by the configuration. However, if any resources have the
[`lifecycle.destroy`](../../language/resources/behavior.mdx#lifecycle-customizations)
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.
In case you want `tofu destroy` to not emit errors and exit with zero status code when resources are forgotten,
you can use the `-suppress-forget-errors` flag.
:::warning
The `destroy` attribute is persisted in the state file, even when resources are removed from the configuration.
Meaning that resources will **not** be destroyed even when removed from the configuration.
If you want to fully destroy such resources (still in the state), you must first add the resource configuration back and
remove the `lifecycle.destroy` attribute (or set it to `true`).
Alternatively, you can add the `removed` block for the removed resource with `lifecycle.destroy = true`, which will override the `destroy` attribute in the state file.
:::