mirror of https://github.com/hashicorp/terraform
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.
```
pull/35171/head
parent
d346432dd0
commit
0cbab0f06a
Loading…
Reference in new issue