Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support moving from null_resource to terraform_data (#35163)
This change enables the built-in provider's `terraform_data` managed resource to work with the `moved` configuration block where the `from` address is a `null_resource` managed resource type from the official `hashicorp/null` provider. It produces no plan differences for typical configurations and specifically helps practitioners from re-running provisioners while moving resource types. In addition to the unit testing, this was manually tested with the following configurations and outputs: Initial configuration (no `triggers`): ```terraform terraform { required_providers { null = { source = "hashicorp/null" version = "3.2.2" } } } resource "null_resource" "example" { provisioner "local-exec" { command = "echo 'Hello, World!'" } } ``` Moved configuration (no `triggers`): ```terraform resource "terraform_data" "example" { provisioner "local-exec" { command = "echo 'Hello, World!'" } } moved { from = null_resource.example to = terraform_data.example } ``` Moved output (no `triggers`): ```console $ terraform apply terraform_data.example: Refreshing state... [id=892002337455008838] Terraform will perform the following actions: # null_resource.example has moved to terraform_data.example resource "terraform_data" "example" { id = "892002337455008838" } Plan: 0 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes Apply complete! Resources: 0 added, 0 changed, 0 destroyed. ``` Initial configuration (with `triggers`): ```terraform terraform { required_providers { null = { source = "hashicorp/null" version = "3.2.2" } } } resource "null_resource" "example" { triggers = { examplekey = "examplevalue" } provisioner "local-exec" { command = "echo 'Hello, World!'" } } ``` Moved configuration (with `triggers`): ```terraform resource "terraform_data" "example" { triggers_replace = { examplekey = "examplevalue" } provisioner "local-exec" { command = "echo 'Hello, World!'" } } moved { from = null_resource.example to = terraform_data.example } ``` Moved output (with `triggers`): ```console $ terraform apply terraform_data.example: Refreshing state... [id=1651348367769440250] Terraform will perform the following actions: # null_resource.example has moved to terraform_data.example resource "terraform_data" "example" { id = "1651348367769440250" # (1 unchanged attribute hidden) } Plan: 0 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes Apply complete! Resources: 0 added, 0 changed, 0 destroyed. ```
- Loading branch information