Merge pull request #2933 from hashicorp/docs-math-interpolation
More details about math in interpolation
This commit is contained in:
commit
d74ea5d472
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue