Clarify math operations available for interpolation

As reported in #2782, the math operations, specifically subtraction,
can cause unexpected behavior when resource or variable names use hyphens.

I added clarification about using spaces with math operators as well as
which operations are available.
This commit is contained in:
Cameron Stokes 2015-08-04 11:09:43 -07:00
parent 41c732dd6c
commit 30d57bf1ec
1 changed files with 33 additions and 2 deletions

View File

@ -17,7 +17,7 @@ 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 in interpolations, allowing You can also perform simple math in interpolations, allowing
you to write expressions such as `${count.index+1}`. you to write expressions such as `${count.index + 1}`.
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}`.
@ -92,7 +92,7 @@ The supported built-in functions are:
format. The syntax for the format is standard `sprintf` syntax. format. The syntax for the format is standard `sprintf` syntax.
Good documentation for the syntax can be [found here](http://golang.org/pkg/fmt/). Good documentation for the syntax can be [found here](http://golang.org/pkg/fmt/).
Example to zero-prefix a count, used commonly for naming servers: Example to zero-prefix a count, used commonly for naming servers:
`format("web-%03d", count.index+1)`. `format("web-%03d", count.index + 1)`.
* `formatlist(format, args...)` - Formats each element of a list * `formatlist(format, args...)` - Formats each element of a list
according to the given format, similarly to `format`, and returns a list. according to the given format, similarly to `format`, and returns a list.
@ -201,3 +201,34 @@ resource "aws_instance" "web" {
With this, we will build a list of `template_file.web_init` resources which we can With this, we will build a list of `template_file.web_init` resources which we can
use in combination with our list of `aws_instance.web` resources. use in combination with our list of `aws_instance.web` resources.
## Math
Simple math can be performed in interpolations:
```
variable "count" {
default = 2
}
resource "aws_instance" "web" {
// ...
count = "${var.count}"
// tag the instance with a counter starting at 1, ie. web-001
tags {
Name = "${format("web-%03d", count.index + 1)}"
}
}
```
The supported operations are:
- *Add*, *Subtract*, *Multiply*, and *Divide* for **float** types
- *Add*, *Subtract*, *Multiply*, *Divide*, and *Modulo* for **integer** types
-> **Note:** Since Terraform allows hyphens in resource and variable names,
it's best to use spaces between math operators to prevent confusion or unexpected
behavior. For example, `${var.instance-count - 1}` will subtract **1** from the
`instance-count` variable value, while `${var.instance-count-1}` will interpolate
the `instance-count-1` variable value.