Merge pull request #2933 from hashicorp/docs-math-interpolation

More details about math in interpolation
This commit is contained in:
Clint 2015-08-12 13:49:58 -05:00
commit d74ea5d472
2 changed files with 35 additions and 4 deletions

View File

@ -31,7 +31,7 @@ IMPROVEMENTS:
* provider/aws: Compute private ip addresses of ENIs if they are not specified [GH-2743] * provider/aws: Compute private ip addresses of ENIs if they are not specified [GH-2743]
* provider/aws: Add `arn` attribute for DynamoDB tables [GH-2924] * provider/aws: Add `arn` attribute for DynamoDB tables [GH-2924]
* provider/azure: Allow `settings_file` to accept XML string [GH-2922] * provider/azure: Allow `settings_file` to accept XML string [GH-2922]
* provider/azure: Provide a simpler error when using a Platform Image without a * provider/azure: Provide a simpler error when using a Platform Image without a
Storage Service [GH-2861] Storage Service [GH-2861]
* provider/google: `account_file` is now expected to be JSON. Paths are still supported for * provider/google: `account_file` is now expected to be JSON. Paths are still supported for
backwards compatibility. [GH-2839] backwards compatibility. [GH-2839]
@ -573,7 +573,7 @@ FEATURES:
less likely to become corrupt in a catastrophic case: terraform panic less likely to become corrupt in a catastrophic case: terraform panic
or system killing Terraform. or system killing Terraform.
* **Math operations** in interpolations. You can now do things like * **Math operations** in interpolations. You can now do things like
`${count.index+1}`. [GH-1068] `${count.index + 1}`. [GH-1068]
* **New AWS SDK:** Move to `aws-sdk-go` (hashicorp/aws-sdk-go), * **New AWS SDK:** Move to `aws-sdk-go` (hashicorp/aws-sdk-go),
a fork of the official `awslabs` repo. We forked for stability while a fork of the official `awslabs` repo. We forked for stability while
`awslabs` refactored the library, and will move back to the officially `awslabs` refactored the library, and will move back to the officially

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.