Merge pull request #9409 from jamtur01/varedits
Some edits to the variables sections
This commit is contained in:
commit
0e20aa3186
|
@ -72,8 +72,8 @@ These are the parameters that can be set:
|
||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
**Default values** can be strings, lists, or maps. If a default is specified,
|
**Note**: Default values can be strings, lists, or maps. If a default is
|
||||||
it must match the declared type of the variable.
|
specified, it must match the declared type of the variable.
|
||||||
|
|
||||||
String values are simple and represent a basic key to value
|
String values are simple and represent a basic key to value
|
||||||
mapping where the key is the variable name. An example is:
|
mapping where the key is the variable name. An example is:
|
||||||
|
@ -162,7 +162,7 @@ $ TF_VAR_image=foo terraform apply
|
||||||
Maps and lists can be specified using environment variables as well using
|
Maps and lists can be specified using environment variables as well using
|
||||||
[HCL](/docs/configuration/syntax.html#HCL) syntax in the value.
|
[HCL](/docs/configuration/syntax.html#HCL) syntax in the value.
|
||||||
|
|
||||||
Given the variable declarations:
|
For a list variable like so:
|
||||||
|
|
||||||
```
|
```
|
||||||
variable "somelist" {
|
variable "somelist" {
|
||||||
|
@ -199,7 +199,7 @@ Variables can be collected in files and passed all at once using the
|
||||||
|
|
||||||
If a file named `terraform.tfvars` is present in the current directory,
|
If a file named `terraform.tfvars` is present in the current directory,
|
||||||
Terraform automatically loads it to populate variables. If the file is named
|
Terraform automatically loads it to populate variables. If the file is named
|
||||||
something else, you can pass the path to the file using the the `-var-file`
|
something else, you can pass the path to the file using the `-var-file`
|
||||||
flag.
|
flag.
|
||||||
|
|
||||||
Variables files use HCL or JSON to define variable values. Strings, lists or
|
Variables files use HCL or JSON to define variable values. Strings, lists or
|
||||||
|
@ -219,13 +219,13 @@ somemap = {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The flag can be used multiple times per command invocation:
|
The `-var-file` flag can be used multiple times per command invocation:
|
||||||
|
|
||||||
```
|
```
|
||||||
terraform apply -var-file=foo.tfvars -var-file=bar.tfvars
|
terraform apply -var-file=foo.tfvars -var-file=bar.tfvars
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note** Variable files are evaluated in the order in which they are specified
|
**Note**: Variable files are evaluated in the order in which they are specified
|
||||||
on the command line. If a variable is defined in more than one variables file,
|
on the command line. If a variable is defined in more than one variables file,
|
||||||
the last value specified is effective.
|
the last value specified is effective.
|
||||||
|
|
||||||
|
@ -234,11 +234,13 @@ the last value specified is effective.
|
||||||
Both these files have the variable `baz` defined:
|
Both these files have the variable `baz` defined:
|
||||||
|
|
||||||
_foo.tfvars_
|
_foo.tfvars_
|
||||||
|
|
||||||
```
|
```
|
||||||
baz = "foo"
|
baz = "foo"
|
||||||
```
|
```
|
||||||
|
|
||||||
_bar.tfvars_
|
_bar.tfvars_
|
||||||
|
|
||||||
```
|
```
|
||||||
baz = "bar"
|
baz = "bar"
|
||||||
```
|
```
|
||||||
|
|
|
@ -9,17 +9,19 @@ description: |-
|
||||||
# Input Variables
|
# Input Variables
|
||||||
|
|
||||||
You now have enough Terraform knowledge to create useful
|
You now have enough Terraform knowledge to create useful
|
||||||
configurations, but we're still hardcoding access keys,
|
configurations, but we're still hard-coding access keys,
|
||||||
AMIs, etc. To become truly shareable and committable to version
|
AMIs, etc. To become truly shareable and version
|
||||||
control, we need to parameterize the configurations. This page
|
controlled, we need to parameterize the configurations. This page
|
||||||
introduces input variables as a way to do this.
|
introduces input variables as a way to do this.
|
||||||
|
|
||||||
## Defining Variables
|
## Defining Variables
|
||||||
|
|
||||||
Let's first extract our access key, secret key, and region
|
Let's first extract our access key, secret key, and region
|
||||||
into a few variables. Create another file `variables.tf` with
|
into a few variables. Create another file `variables.tf` with
|
||||||
the following contents. Note that the file can be named anything,
|
the following contents.
|
||||||
since Terraform loads all files ending in `.tf` in a directory.
|
|
||||||
|
**Note**: that the file can be named anything, since Terraform loads all
|
||||||
|
files ending in `.tf` in a directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
variable "access_key" {}
|
variable "access_key" {}
|
||||||
|
@ -57,7 +59,9 @@ There are multiple ways to assign variables. Below is also the order
|
||||||
in which variable values are chosen. If they're found in an option first
|
in which variable values are chosen. If they're found in an option first
|
||||||
below, then the options below are ignored.
|
below, then the options below are ignored.
|
||||||
|
|
||||||
**Command-line flags:** You can set it directly on the command-line with the
|
#### Command-line flags
|
||||||
|
|
||||||
|
You can set variables directly on the command-line with the
|
||||||
`-var` flag. Any command in Terraform that inspects the configuration
|
`-var` flag. Any command in Terraform that inspects the configuration
|
||||||
accepts this flag, such as `apply`, `plan`, and `refresh`:
|
accepts this flag, such as `apply`, `plan`, and `refresh`:
|
||||||
|
|
||||||
|
@ -71,24 +75,29 @@ $ terraform plan \
|
||||||
Once again, setting variables this way will not save them, and they'll
|
Once again, setting variables this way will not save them, and they'll
|
||||||
have to be input repeatedly as commands are executed.
|
have to be input repeatedly as commands are executed.
|
||||||
|
|
||||||
**From a file:** To persist variable values, create
|
#### From a file
|
||||||
a file and assign variables within this file. Create a file named
|
|
||||||
"terraform.tfvars" with the following contents:
|
To persist variable values, create a file and assign variables within
|
||||||
|
this file. Create a file named `terraform.tfvars` with the following
|
||||||
|
contents:
|
||||||
|
|
||||||
```
|
```
|
||||||
access_key = "foo"
|
access_key = "foo"
|
||||||
secret_key = "bar"
|
secret_key = "bar"
|
||||||
```
|
```
|
||||||
|
|
||||||
If a "terraform.tfvars" file is present in the current directory,
|
If a `terraform.tfvars` file is present in the current directory,
|
||||||
Terraform automatically loads it to populate variables. If the file is
|
Terraform automatically loads it to populate variables. If the file is
|
||||||
named something else, you can use the `-var-file` flag directly to
|
named something else, you can use the `-var-file` flag directly to
|
||||||
specify a file. These files are the same syntax as Terraform configuration
|
specify a file. These files are the same syntax as Terraform
|
||||||
files. And like Terraform configuration files, these files can also be JSON.
|
configuration files. And like Terraform configuration files, these files
|
||||||
|
can also be JSON.
|
||||||
|
|
||||||
**From environment variables:** Terraform will read environment variables
|
#### From environment variables
|
||||||
in the form of `TF_VAR_name` to find the value for a variable. For example,
|
|
||||||
the `TF_VAR_access_key` variable can be set to set the `access_key` variable.
|
Terraform will read environment variables in the form of `TF_VAR_name`
|
||||||
|
to find the value for a variable. For example, the `TF_VAR_access_key`
|
||||||
|
variable can be set to set the `access_key` variable.
|
||||||
|
|
||||||
We don't recommend saving usernames and password to version control, But you
|
We don't recommend saving usernames and password to version control, But you
|
||||||
can create a local secret variables file and use `-var-file` to load it.
|
can create a local secret variables file and use `-var-file` to load it.
|
||||||
|
@ -102,30 +111,35 @@ $ terraform plan \
|
||||||
-var-file="production.tfvars"
|
-var-file="production.tfvars"
|
||||||
```
|
```
|
||||||
|
|
||||||
**UI Input:** If you execute `terraform plan` or apply without doing
|
#### UI Input
|
||||||
anything, Terraform will ask you to input the variables interactively.
|
|
||||||
These variables are not saved, but provides a nice user experience for
|
|
||||||
getting started with Terraform. (UI Input is only supported for string
|
|
||||||
variables - list and map variables must be populated via one of the
|
|
||||||
other mechanisms.
|
|
||||||
|
|
||||||
**Variable Defaults**: If no value is assigned to a variable via any of these
|
If you execute `terraform plan` or apply without doing anything,
|
||||||
methods and the variable has a `default` key in its declaration, that value
|
Terraform will ask you to input the variables interactively. These
|
||||||
will be used for the variable.
|
variables are not saved, but provides a nice user experience for getting
|
||||||
|
started with Terraform.
|
||||||
|
|
||||||
|
**Note**: UI Input is only supported for string variables. List and map
|
||||||
|
variables must be populated via one of the other mechanisms.
|
||||||
|
|
||||||
|
#### Variable Defaults
|
||||||
|
|
||||||
|
If no value is assigned to a variable via any of these methods and the
|
||||||
|
variable has a `default` key in its declaration, that value will be used
|
||||||
|
for the variable.
|
||||||
|
|
||||||
<a id="mappings"></a>
|
<a id="mappings"></a>
|
||||||
<a id="maps"></a>
|
<a id="maps"></a>
|
||||||
## Maps
|
## Maps
|
||||||
|
|
||||||
We've replaced our sensitive strings with variables, but we still
|
We've replaced our sensitive strings with variables, but we still
|
||||||
are hardcoding AMIs. Unfortunately, AMIs are specific to the region
|
are hard-coding AMIs. Unfortunately, AMIs are specific to the region
|
||||||
that is in use. One option is to just ask the user to input the proper
|
that is in use. One option is to just ask the user to input the proper
|
||||||
AMI for the region, but Terraform can do better than that with
|
AMI for the region, but Terraform can do better than that with
|
||||||
_maps_.
|
_maps_.
|
||||||
|
|
||||||
Maps are a way to create variables that are lookup tables. An example
|
Maps are a way to create variables that are lookup tables. An example
|
||||||
will show this best. Let's extract our AMIs into a map and add
|
will show this best. Let's extract our AMIs into a map and add
|
||||||
support for the "us-west-2" region as well:
|
support for the `us-west-2` region as well:
|
||||||
|
|
||||||
```
|
```
|
||||||
variable "amis" {
|
variable "amis" {
|
||||||
|
@ -137,11 +151,11 @@ variable "amis" {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
A variable can have a "map" type assigned explicitly, or it can be implicitly
|
A variable can have a `map` type assigned explicitly, or it can be implicitly
|
||||||
declared as a map by specifying a default value that is a map. The above
|
declared as a map by specifying a default value that is a map. The above
|
||||||
demonstrates both.
|
demonstrates both.
|
||||||
|
|
||||||
Then, replace the "aws\_instance" with the following:
|
Then, replace the `aws\_instance` with the following:
|
||||||
|
|
||||||
```
|
```
|
||||||
resource "aws_instance" "example" {
|
resource "aws_instance" "example" {
|
||||||
|
@ -170,7 +184,7 @@ $ terraform plan -var 'amis={ us-east-1 = "foo", us-west-2 = "bar" }'
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: even if every key will be assigned as input, the variable must be
|
**Note**: Even if every key will be assigned as input, the variable must be
|
||||||
established as a map by setting its default to `{}`.
|
established as a map by setting its default to `{}`.
|
||||||
|
|
||||||
Here is an example of setting a map's keys from a file. Starting with these
|
Here is an example of setting a map's keys from a file. Starting with these
|
||||||
|
|
Loading…
Reference in New Issue