Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge pull request #35112 from hashicorp/docs/atrujillo/lang-add-move… #35131

Merged
merged 1 commit into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions website/data/language-nav-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,10 @@
}
]
},
{
"title": "Moved block",
"path": "moved"
},
{ "title": "Checks", "path": "checks" },
{
"title": "Import",
Expand Down
62 changes: 62 additions & 0 deletions website/docs/language/moved.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
page_title: moved block configuration reference
description: Learn about the `moved` block that you can specify in Terraform configurations. The `moved` block programmatically changes the location of a resource.
---

# Moved block configuration reference

This topic provides reference information for the `moved` block.

## Introduction

The `moved` block programmatically changes the address of a resource. Refer to [Refactoring](/terraform/language/modules/develop/refactoring) for details about how to use the `moved` block in your Terraform configurations.

## Configuration model

The following list outlines field hierarchy, language-specific data types, and requirements in the `moved` block.

- [`moved`](#moved): map
- [`from`](#moved): string
- [`to`](#moved): string

## Complete configuration

When every field is defined, a `moved` block has the following form:

```hcl
moved = {
from = <old address for the resource>
to = <new address for the resource>
}
```

## Specification

This section provides details about the fields you can configure in the `moved` block.

### `moved`

Map that specifies addresses for the resource. The following table describes the fields you can set in the `moved` block.

| Field | Description | Type | Required |
| --- | --- | --- | --- |
| `from` | Specifies a resource's previous address. The syntax allows Terraform to select modules, resources, and resources inside child modules. | string | required |
| `to` | Specifies the new address to relocate the resource to. The syntax allows Terraform to select modules, resources, and resources inside child modules. | string | required |

Before creating a new plan for the resource specified in the `to` field, Terraform checks the state for an existing object at the address specified in the `from` field. Terraform renames existing objects to the string specified in the `to` field and then creates a plan. The plan directs Terraform to provision the resource specified in the `from` field as the resource specified in the `to` field. As a result, Terraform does not destroy the resource during the Terraform run.

## Example

The following example moves an AWS instance from address `aws_instance.a` to `aws_instance.b`:

```hcl
moved {
from = aws_instance.a
to = aws_instance.b
}
```