command: "terraform add" is experimental

We're aware of several quirks of this command's current design, which
result from some existing architectural limitations that we can't address
immediately.

However, we do still want to make this command available in its current
capacity as an incremental improvement, so as a compromise we'll document
it as experimental. Our intent here is to exclude it from the
Terraform 1.0 Compatibility Promises so that we can have the space to
continue to improve the design as other parts of the overall Terraform
system gain new capabilities.

We don't currently have any concrete plan for this command to be
stabilized and subject to compatibility promises. That decision will
follow from ongoing discussions with other teams whose systems may need to
change in order to support the final design of "terraform add".
This commit is contained in:
Martin Atkins
2021-08-18 14:30:13 -07:00
parent 8ff7e65bd6
commit 43d753e727
5 changed files with 179 additions and 43 deletions

View File

@@ -8,14 +8,34 @@ description: |-
# Command: add
The `terraform add` command generates a resource configuration template with
`null` placeholder values for all attributes, unless the `-from-state` flag is
used. By default, the template only includes required resource attributes; the
`-optional` flag tells Terraform to also include any optional attributes.
The `terraform add` command generates a starting point for the configuration
of a particular resource.
When `terraform add` used with the `-from-state` will _not_ print sensitive
values. You can use `terraform show ADDRESS` to see all values, including
sensitive values, recorded in state for the given resource address.
~> **Warning:** This command is currently experimental. Its exact behavior and
command line arguments are likely to change in future releases based on
feedback. We don't recommend building automation around the current design of
this command, but it's safe to use directly in a development environment
setting.
By default, Terraform will include only the subset of arguments that are marked
by the provider as being required, and will use `null` as a placeholder for
their values. You can then replace `null` with suitable expressions in order
to make the arguments valid.
If you use the `-optional` option then Terraform will also include arguments
that the provider declares as optional. You can then either write a suitable
expression for each argument or remove the arguments you wish to leave unset.
If you use the `-from-state` option then Terraform will instead generate a
configuration containing expressions which will produce the same values as
the corresponding resource instance object already tracked in the Terraform
state, if for example you've previously imported the object using
[`terraform import`](import.html).
-> **Note:** If you use `-from-state`, the result will not include expressions
for any values which are marked as sensitive in the state. If you want to
see those, you can inspect the state data directly using
`terraform state show ADDRESS`.
## Usage
@@ -27,14 +47,35 @@ already exist in the configuration. Addresses are in
This command accepts the following options:
`-from-state` - populate the template with values from a resource
already in state. Sensitive values are redacted.
* `-from-state` - Fill the template with values from an existing resource
instance already tracked in the state. By default, Terraform will emit only
placeholder values based on the resource type.
`-optional` - include optional attributes in the template.
* `-optional` - Include optional arguments. By default, the result will
include only required arguments.
`-out=FILENAME` - writes the template to the given filename. If the file already
exists, the template will be added to the end of the file.
* `-out=FILENAME` - Write the template to a file, instead of to standard
output.
`-provider=provider` - override the configured provider for the resource. By
default, Terraform will use the configured provider for the given resource type,
and that is the best behavior in most cases.
* `-provider=provider` - Override the provider configuration for the resource,
using the absolute provider configuration address syntax.
Absolute provider configuration syntax uses the full source address of
the provider, rather than a local name declared in the relevant module.
For example, to select the aliased provider configuration "us-east-1"
of the official AWS provider, use:
```
-provider='provider["hashicorp/aws"].us-east-1'
```
or, if you are using the Windows command prompt, use Windows-style escaping
for the quotes inside the address:
```
-provider=provider[\"hashicorp/aws\"].us-east-1
```
This is incompatible with `-from-state`, because in that case Terraform
will use the provider configuration already selected in the state, which
is the provider configuration that most recently managed the object.