Arithmetic and Logical Operators
An operator is a type of expression that transforms or combines one or more other expressions. Operators either combine two values in some way to produce a third result value, or transform a single given value to produce a single result.
Operators that work on two values place an operator symbol between the two
values, similar to mathematical notation:
1 + 2. Operators that work on
only one value place an operator symbol before that value, like
When multiple operators are used together in an expression, they are evaluated in the following order of operations:
Use parentheses to override the default order of operations. Without
parentheses, higher levels will be evaluated first, so Terraform will interpret
1 + 2 * 3 as
1 + (2 * 3) and not as
(1 + 2) * 3.
The different operators can be gathered into a few different groups with similar behavior, as described below. Each group of operators expects its given values to be of a particular type. Terraform will attempt to convert values to the required type automatically, or will produce an error message if automatic conversion is impossible.
The arithmetic operators all expect number values and produce number values as results:
a + breturns the result of adding
a - breturns the result of subtracting
a * breturns the result of multiplying
a / breturns the result of dividing
a % breturns the remainder of dividing
b. This operator is generally useful only when used with whole numbers.
-areturns the result of multiplying
The equality operators both take two values of any type and produce boolean values as results.
a == breturns
bboth have the same type and the same value, or
a != bis the opposite of
a == b.
Because the equality operators require both arguments to be of exactly the same type in order to decide equality, we recommend using these operators only with values of primitive types or using explicit type conversion functions to indicate which type you are intending to use for comparison.
Comparisons between structural types may produce surprising results if you
are not sure about the types of each of the arguments. For example,
var.list ==  may seem like it would return
var.list were an
empty list, but
 actually builds a value of type
tuple() and so the
two values can never match. In this situation it's often clearer to write
length(var.list) == 0 instead.
The comparison operators all expect number values and produce boolean values as results.
a < breturns
ais less than
a <= breturns
ais less than or equal to
a > breturns
ais greater than
a >= breturns
ais greater than or equal to
The logical operators all expect bool values and produce bool values as results.
a || breturns
falseif both are
a && breturns
falseif either one is
Terraform does not have an operator for the "exclusive OR" operation. If you
know that both operators are boolean values then exclusive OR is equivalent
!= ("not equal") operator.
The logical operators in Terraform do not short-circuit, meaning
var.foo || var.foo.bar will produce an error message if
null because both
var.foo.bar are evaluated.