diff --git a/website/source/docs/configuration/interpolation.html.md b/website/source/docs/configuration/interpolation.html.md
index bca61c835..731925296 100644
--- a/website/source/docs/configuration/interpolation.html.md
+++ b/website/source/docs/configuration/interpolation.html.md
@@ -15,8 +15,10 @@ interpolations are wrapped in `${}`, such as `${var.foo}`.
The interpolation syntax is powerful and allows you to reference
variables, attributes of resources, call functions, etc.
-You can also perform [simple math](#math) in interpolations, allowing
-you to write expressions such as `${count.index + 1}`.
+You can perform [simple math](#math) in interpolations, allowing
+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}`
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.
-### User string variables
+#### User string variables
Use the `var.` prefix followed by the variable name. For example,
`${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"]}`
would get the value of the `us-east-1` key within the `amis` map
variable.
-### User list variables
+#### User list variables
The syntax is `["${var.LIST}"]`. For example, `["${var.subnets}"]`
would get the value of the `subnets` list, as a list. You can also
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}`
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
provisioners.
-### Attributes of other resources
+#### Attributes of other resources
The syntax is `TYPE.NAME.ATTRIBUTE`. For example,
`${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
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
interpolate the `bar` output from the `foo`
[module](/docs/modules/index.html).
-### Count information
+#### Count information
The syntax is `count.FIELD`. For example, `${count.index}` will
interpolate the current index in a multi-count resource. For more
@@ -76,7 +78,7 @@ page](/docs/configuration/resources.html).
-### Path information
+#### Path information
The syntax is `path.TYPE`. TYPE can be `cwd`, `module`, or `root`.
`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.module` variable.
+
+## 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.
+
## Built-in Functions
@@ -266,7 +307,7 @@ The supported built-in functions are:
in brackets to indicate that the output is actually a list, e.g.
`a_resource_param = ["${split(",", var.CSV_STRING)}"]`.
Example: `split(",", module.amod.server_ids)`
-
+
* `timestamp()` - Returns a UTC timestamp string in RFC 3339 format. This string will change with every
invocation of the function, so in order to prevent diffs on every plan & apply, it must be used with the
[`ignore_changes`](/docs/configuration/resources.html#ignore-changes) lifecycle attribute.