| --- | |
| description: >- | |
| The `tofu state replace-provider` command replaces the provider for | |
| resources in the OpenTofu state. | |
| --- | |
| # Command: state replace-provider | |
| The `tofu state replace-provider` command is used to replace the provider | |
| for resources in a [OpenTofu state](../../../language/state/index.mdx). | |
| ## Usage | |
| Usage: `tofu state replace-provider [options] FROM_PROVIDER_FQN TO_PROVIDER_FQN` | |
| This command will update all resources using the "from" provider, setting the | |
| provider to the specified "to" provider. This allows changing the source of a | |
| provider which currently has resources in state. | |
| This command will output a backup copy of the state prior to saving any | |
| changes. The backup cannot be disabled. Due to the destructive nature | |
| of this command, backups are required. | |
| :::note | |
| Use of variables in [module sources](../../../language/modules/sources.mdx#support-for-variable-and-local-evaluation), | |
| [backend configuration](../../../language/settings/backends/configuration.mdx#variables-and-locals), | |
| or [encryption block](../../../language/state/encryption.mdx#configuration) | |
| requires [assigning values to root module variables](../../../language/values/variables.mdx#assigning-values-to-root-module-variables) | |
| when running `tofu state replace-providers`. | |
| ::: | |
| This command also accepts the following options: | |
| - `-auto-approve` - Skip interactive approval. | |
| - `-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=0s` - Duration to retry a state lock. | |
| - `-var 'NAME=VALUE'` - Sets a value for a single | |
| [input variable](../../../language/values/variables.mdx) declared in the | |
| root module of the configuration. Use this option multiple times to set | |
| more than one variable. Refer to | |
| [Input Variables on the Command Line](../plan.mdx#input-variables-on-the-command-line) for more information. | |
| - `-var-file=FILENAME` - Sets values for potentially many | |
| [input variables](../../../language/values/variables.mdx) declared in the | |
| root module of the configuration, using definitions from a | |
| ["tfvars" file](../../../language/values/variables.mdx#variable-definitions-tfvars-files). | |
| Use this option multiple times to include values from more than one file. | |
| * `-json` - Enables the [machine readable JSON UI](../../../internals/machine-readable-ui.mdx) output. | |
| This option can be used only together with `-auto-approve` flag. | |
| * `-json-into=out.json` - Produces the same output as -json, but redirected to a file. This allows | |
| for simultaneous capture of both human readable and machine readable logs. | |
| There are several other ways to set values for input variables in the root | |
| module, aside from the `-var` and `-var-file` options. Refer to | |
| [Assigning Values to Root Module Variables](../../../language/values/variables.mdx#assigning-values-to-root-module-variables) for more information. | |
| For configurations using the [`cloud` backend](../../../cli/cloud/index.mdx) or the [`remote` backend](../../../language/settings/backends/remote.mdx) | |
| only, `tofu state replace-provider` | |
| also accepts the option | |
| [`-ignore-remote-version`](../../../cli/cloud/command-line-arguments.mdx#ignore-remote-version). | |
| For configurations using | |
| [the `local` state](../../../language/settings/backends/local.mdx) only, | |
| `tofu state replace-provider` also accepts the legacy options | |
| [`-state`, `-state-out`, and `-backup`](../../../language/settings/backends/local.mdx#command-line-arguments). | |
| ## Example | |
| The example below replaces the `hashicorp/aws` provider with a fork by `acme`, hosted at a private registry at `registry.acme.corp`: | |
| ```shell | |
| $ tofu state replace-provider hashicorp/aws registry.acme.corp/acme/aws | |
| ``` |