website: update website for conditionals
This commit is contained in:
parent
f7abd6eb1c
commit
4ab5356ff9
|
@ -15,8 +15,10 @@ interpolations are wrapped in `${}`, such as `${var.foo}`.
|
||||||
The interpolation syntax is powerful and allows you to reference
|
The interpolation syntax is powerful and allows you to reference
|
||||||
variables, attributes of resources, call functions, etc.
|
variables, attributes of resources, call functions, etc.
|
||||||
|
|
||||||
You can also perform [simple math](#math) in interpolations, allowing
|
You can perform [simple math](#math) in interpolations, allowing
|
||||||
you to write expressions such as `${count.index + 1}`.
|
you to write expressions such as `${count.index + 1}`. And you can
|
||||||
|
also use [conditionals](#conditionals) to determine a value based
|
||||||
|
on some logic.
|
||||||
|
|
||||||
You can escape interpolation with double dollar signs: `$${foo}`
|
You can escape interpolation with double dollar signs: `$${foo}`
|
||||||
will be rendered as a literal `${foo}`.
|
will be rendered as a literal `${foo}`.
|
||||||
|
@ -25,24 +27,24 @@ will be rendered as a literal `${foo}`.
|
||||||
|
|
||||||
There are a variety of available variable references you can use.
|
There are a variety of available variable references you can use.
|
||||||
|
|
||||||
### User string variables
|
#### User string variables
|
||||||
|
|
||||||
Use the `var.` prefix followed by the variable name. For example,
|
Use the `var.` prefix followed by the variable name. For example,
|
||||||
`${var.foo}` will interpolate the `foo` variable value.
|
`${var.foo}` will interpolate the `foo` variable value.
|
||||||
|
|
||||||
### User map variables
|
#### User map variables
|
||||||
|
|
||||||
The syntax is `var.MAP["KEY"]`. For example, `${var.amis["us-east-1"]}`
|
The syntax is `var.MAP["KEY"]`. For example, `${var.amis["us-east-1"]}`
|
||||||
would get the value of the `us-east-1` key within the `amis` map
|
would get the value of the `us-east-1` key within the `amis` map
|
||||||
variable.
|
variable.
|
||||||
|
|
||||||
### User list variables
|
#### User list variables
|
||||||
|
|
||||||
The syntax is `["${var.LIST}"]`. For example, `["${var.subnets}"]`
|
The syntax is `["${var.LIST}"]`. For example, `["${var.subnets}"]`
|
||||||
would get the value of the `subnets` list, as a list. You can also
|
would get the value of the `subnets` list, as a list. You can also
|
||||||
return list elements by index: `${var.subnets[idx]}`.
|
return list elements by index: `${var.subnets[idx]}`.
|
||||||
|
|
||||||
### Attributes of your own resource
|
#### Attributes of your own resource
|
||||||
|
|
||||||
The syntax is `self.ATTRIBUTE`. For example `${self.private_ip_address}`
|
The syntax is `self.ATTRIBUTE`. For example `${self.private_ip_address}`
|
||||||
will interpolate that resource's private IP address.
|
will interpolate that resource's private IP address.
|
||||||
|
@ -50,7 +52,7 @@ will interpolate that resource's private IP address.
|
||||||
-> **Note**: The `self.ATTRIBUTE` syntax is only allowed and valid within
|
-> **Note**: The `self.ATTRIBUTE` syntax is only allowed and valid within
|
||||||
provisioners.
|
provisioners.
|
||||||
|
|
||||||
### Attributes of other resources
|
#### Attributes of other resources
|
||||||
|
|
||||||
The syntax is `TYPE.NAME.ATTRIBUTE`. For example,
|
The syntax is `TYPE.NAME.ATTRIBUTE`. For example,
|
||||||
`${aws_instance.web.id}` will interpolate the ID attribute from the
|
`${aws_instance.web.id}` will interpolate the ID attribute from the
|
||||||
|
@ -61,13 +63,13 @@ syntax to get a list of all the attributes: `${aws_instance.web.*.id}`.
|
||||||
This is documented in more detail in the [resource configuration
|
This is documented in more detail in the [resource configuration
|
||||||
page](/docs/configuration/resources.html).
|
page](/docs/configuration/resources.html).
|
||||||
|
|
||||||
### Outputs from a module
|
#### Outputs from a module
|
||||||
|
|
||||||
The syntax is `MODULE.NAME.OUTPUT`. For example `${module.foo.bar}` will
|
The syntax is `MODULE.NAME.OUTPUT`. For example `${module.foo.bar}` will
|
||||||
interpolate the `bar` output from the `foo`
|
interpolate the `bar` output from the `foo`
|
||||||
[module](/docs/modules/index.html).
|
[module](/docs/modules/index.html).
|
||||||
|
|
||||||
### Count information
|
#### Count information
|
||||||
|
|
||||||
The syntax is `count.FIELD`. For example, `${count.index}` will
|
The syntax is `count.FIELD`. For example, `${count.index}` will
|
||||||
interpolate the current index in a multi-count resource. For more
|
interpolate the current index in a multi-count resource. For more
|
||||||
|
@ -76,7 +78,7 @@ page](/docs/configuration/resources.html).
|
||||||
|
|
||||||
<a id="path-variables"></a>
|
<a id="path-variables"></a>
|
||||||
|
|
||||||
### Path information
|
#### Path information
|
||||||
|
|
||||||
The syntax is `path.TYPE`. TYPE can be `cwd`, `module`, or `root`.
|
The syntax is `path.TYPE`. TYPE can be `cwd`, `module`, or `root`.
|
||||||
`cwd` will interpolate the current working directory. `module` will
|
`cwd` will interpolate the current working directory. `module` will
|
||||||
|
@ -84,6 +86,45 @@ interpolate the path to the current module. `root` will interpolate the
|
||||||
path of the root module. In general, you probably want the
|
path of the root module. In general, you probably want the
|
||||||
`path.module` variable.
|
`path.module` variable.
|
||||||
|
|
||||||
|
<a id="conditionals"></a>
|
||||||
|
## Conditionals
|
||||||
|
|
||||||
|
Interpolations may contain conditionals to branch on the final value.
|
||||||
|
|
||||||
|
```
|
||||||
|
resource "aws_instance" "web" {
|
||||||
|
subnet = "${var.env == "production" ? var.prod_subnet : var.dev_subnet}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The conditional syntax is the well-known ternary operation:
|
||||||
|
|
||||||
|
CONDITION ? TRUEVAL : FALSEVAL
|
||||||
|
|
||||||
|
The condition can be any valid interpolation syntax, such as variable
|
||||||
|
access, a function call, or even another conditional. The true and false
|
||||||
|
value can also be any valid interpolation syntax. The returned types by
|
||||||
|
the true and false side must be the same.
|
||||||
|
|
||||||
|
The support operators are:
|
||||||
|
|
||||||
|
* Equality: `==` and `!=`
|
||||||
|
* Numerical comparison: `>`, `<`, `>=`, `<=`
|
||||||
|
* Boolean logic: `&&`, `||`, unary `!`
|
||||||
|
|
||||||
|
A common use case for conditionals is to enable/disable a resource by
|
||||||
|
conditionally setting the count:
|
||||||
|
|
||||||
|
```
|
||||||
|
resource "aws_instance" "vpn" {
|
||||||
|
count = "${var.something ? 1 : 0}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In the example above, the "vpn" resource will only be included if
|
||||||
|
"var.something" evaluates to true. Otherwise, the VPN resource will
|
||||||
|
not be created at all.
|
||||||
|
|
||||||
<a id="functions"></a>
|
<a id="functions"></a>
|
||||||
## Built-in Functions
|
## Built-in Functions
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue