На этом шаге вы узнаете, как переименовать ресурс в файле состояния с помощью команды terraform state mv. Это распространенная задача при рефакторинге вашего кода Terraform. Если вы переименуете блок ресурса в файле .tf, Terraform решит, что вы хотите уничтожить старый ресурс и создать новый. Команда state mv позволяет обновить файл состояния в соответствии с изменениями в вашем коде, предотвращая ненужное уничтожение и создание.
Сначала переименуем ресурс в нашем конфигурационном файле. Откройте main.tf с помощью редактора nano:
nano main.tf
Измените имя ресурса с example на example_renamed. Файл должен выглядеть следующим образом:
resource "local_file" "example_renamed" {
content = "This is an example file managed by Terraform."
filename = "${path.module}/example.txt"
}
Нажмите Ctrl+X, затем Y и Enter, чтобы сохранить и выйти.
Теперь выполните terraform plan, чтобы увидеть, что намерен сделать Terraform:
terraform plan
План покажет, что Terraform хочет уничтожить local_file.example и создать local_file.example_renamed, что не является тем, что нам нужно.
local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
- destroy
Terraform will perform the following actions:
## local_file.example will be destroyed
## (because local_file.example is not in configuration)
- resource "local_file" "example" {
- content = "This is an example file managed by Terraform." -> null
- content_base64sha256 = "F5EYZhFNzSXdE4CUftwQoDVqvdiufZpVyiLMqyZVOcQ=" -> null
- content_base64sha512 = "m1hvaxMuc/EhaKintyI54NSTTJ5yXpqHPCBNoHubF0rvF3JAj36lMj20aPcv21+3/OK+SqkiTlnT/LdvLCwqDA==" -> null
- content_md5 = "a43bdd236c2f0f4d87452ba2ef0867e4" -> null
- content_sha1 = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
- content_sha256 = "17911866114dcd25dd1380947edc10a0356abdd8ae7d9a55ca22ccab265539c4" -> null
- content_sha512 = "9b586f6b132e73f12168a8a7b72239e0d4934c9e725e9a873c204da07b9b174aef1772408f7ea5323db468f72fdb5fb7fce2be4aa9224e59d3fcb76f2c2c2a0c" -> null
- directory_permission = "0777" -> null
- file_permission = "0777" -> null
- filename = "./example.txt" -> null
- id = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
}
## local_file.example_renamed will be created
+ resource "local_file" "example_renamed" {
+ content = "This is an example file managed by Terraform."
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "0777"
+ file_permission = "0777"
+ filename = "./example.txt"
+ id = (known after apply)
}
Plan: 1 to add, 0 to change, 1 to destroy.
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
Чтобы это исправить, мы сообщим Terraform, что мы просто переместили ресурс. Выполните команду terraform state mv со старым адресом и новым адресом:
terraform state mv local_file.example local_file.example_renamed
Вы увидите подтверждающее сообщение:
Move "local_file.example" to "local_file.example_renamed"
Successfully moved 1 object(s).
Теперь снова выполните terraform plan:
terraform plan
На этот раз Terraform сообщает, что изменения не требуются, поскольку состояние теперь соответствует конфигурации.
local_file.example_renamed: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.