From df65d160225dff11f4f58508d7559d2c298493c8 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Tue, 14 Feb 2023 09:15:36 -0500 Subject: [PATCH] replace null_resource with terraform_data Replace references to null_resource with terraform_data, and link the use of terraform_data from replace_triggered_by. --- website/data/language-nav-data.json | 2 +- .../language/meta-arguments/lifecycle.mdx | 2 + .../resources/provisioners/local-exec.mdx | 4 +- .../resources/provisioners/null_resource.mdx | 38 +++++++------------ .../language/resources/terraform-data.mdx | 2 +- website/layouts/language.erb | 2 +- 6 files changed, 20 insertions(+), 30 deletions(-) diff --git a/website/data/language-nav-data.json b/website/data/language-nav-data.json index e82b199ff1..22f3999d28 100644 --- a/website/data/language-nav-data.json +++ b/website/data/language-nav-data.json @@ -96,7 +96,7 @@ ] }, { - "title": "The terraform_data Resource", + "title": "The terraform_data Resource Type", "path": "resources/terraform-data" } ] diff --git a/website/docs/language/meta-arguments/lifecycle.mdx b/website/docs/language/meta-arguments/lifecycle.mdx index cd38ffeb09..ecfb7cafe4 100644 --- a/website/docs/language/meta-arguments/lifecycle.mdx +++ b/website/docs/language/meta-arguments/lifecycle.mdx @@ -144,6 +144,8 @@ The arguments available within a `lifecycle` block are `create_before_destroy`, } ``` + If a local value, module output, or variable needs to be tracked by `replace_triggered_by`, it can be stored in a [`terraform_data`](language/resources/terraform-data) managed resource. + ## Custom Condition Checks You can add `precondition` and `postcondition` blocks with a `lifecycle` block to specify assumptions and guarantees about how resources and data sources operate. The following examples creates a precondition that checks whether the AMI is properly configured. diff --git a/website/docs/language/resources/provisioners/local-exec.mdx b/website/docs/language/resources/provisioners/local-exec.mdx index 952c131aa4..83241ffa43 100644 --- a/website/docs/language/resources/provisioners/local-exec.mdx +++ b/website/docs/language/resources/provisioners/local-exec.mdx @@ -67,7 +67,7 @@ The following arguments are supported: ### Interpreter Examples ```hcl -resource "null_resource" "example1" { +resource "terraform_data" "example1" { provisioner "local-exec" { command = "open WFH, '>completed.txt' and print WFH scalar localtime" interpreter = ["perl", "-e"] @@ -76,7 +76,7 @@ resource "null_resource" "example1" { ``` ```hcl -resource "null_resource" "example2" { +resource "terraform_data" "example2" { provisioner "local-exec" { command = "Get-Date > completed.txt" interpreter = ["PowerShell", "-Command"] diff --git a/website/docs/language/resources/provisioners/null_resource.mdx b/website/docs/language/resources/provisioners/null_resource.mdx index fc270e364c..8722938bec 100644 --- a/website/docs/language/resources/provisioners/null_resource.mdx +++ b/website/docs/language/resources/provisioners/null_resource.mdx @@ -1,23 +1,22 @@ --- page_title: Provisioners Without a Resource description: >- - A null_resource allows you to configure provisioners that are not directly - associated with a single existing resource. + A terraform_data managed resource allows you to configure provisioners that + are not directly associated with a single existing resource. --- # Provisioners Without a Resource -[null]: https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource - If you need to run provisioners that aren't directly associated with a specific resource, you can associate them with a `null_resource`. -Instances of [`null_resource`][null] are treated like normal resources, but they -don't do anything. Like with any other resource, you can configure -[provisioners](/language/resources/provisioners/syntax) and [connection -details](/language/resources/provisioners/connection) on a `null_resource`. You can also -use its `triggers` argument and any meta-arguments to control exactly where in -the dependency graph its provisioners will run. +Instances of [`terraform_data`](language/resources/terraform-data) are treated +like normal resources, but they don't do anything. Like with any other resource +type, you can configure [provisioners](/language/resources/provisioners/syntax) +and [connection details](/language/resources/provisioners/connection) on a +`terraform_data` resource. You can also use its `triggers` argument and any +meta-arguments to control exactly where in the dependency graph its +provisioners will run. ~> **Important:** Use provisioners as a last resort. There are better alternatives for most situations. Refer to [Declaring Provisioners](/language/resources/provisioners/syntax) for more details. @@ -31,16 +30,14 @@ resource "aws_instance" "cluster" { # ... } -resource "null_resource" "cluster" { - # Changes to any instance of the cluster requires re-provisioning - triggers = { - cluster_instance_ids = "${join(",", aws_instance.cluster.*.id)}" - } +resource "terraform_data" "cluster" { + # Replacement of any instance of the cluster requires re-provisioning + triggers_replace = aws_instance.cluster.[*].id # Bootstrap script can run on any instance of the cluster # So we just choose the first in this case connection { - host = "${element(aws_instance.cluster.*.public_ip, 0)}" + host = aws_instance.cluster.[0].public_ip } provisioner "remote-exec" { @@ -51,12 +48,3 @@ resource "null_resource" "cluster" { } } ``` - -## Argument Reference - -In addition to meta-arguments supported by all resources, `null_resource` -supports the following specific arguments: - -- `triggers` - A map of values which should cause this set of provisioners to - re-run. Values are meant to be interpolated references to variables or - attributes of other resources. diff --git a/website/docs/language/resources/terraform-data.mdx b/website/docs/language/resources/terraform-data.mdx index c573c0feee..703c92d4fc 100644 --- a/website/docs/language/resources/terraform-data.mdx +++ b/website/docs/language/resources/terraform-data.mdx @@ -1,5 +1,5 @@ --- -page_title: The terraform_data Managed Resource +page_title: The terraform_data Managed Resource Type description: >- Retrieves the root module output values from a Terraform state snapshot stored in a remote backend. diff --git a/website/layouts/language.erb b/website/layouts/language.erb index 8c685a9a7f..56e5884f4e 100644 --- a/website/layouts/language.erb +++ b/website/layouts/language.erb @@ -143,7 +143,7 @@
  • - Terraform Data Resource + Terraform Data Resource Type