Conditional expressions in Terraform allow you to dynamically control values in your configurations based on logic and input. Whether you’re a beginner or a seasoned DevOps engineer, understanding how to implement these expressions can significantly improve the flexibility and efficiency of your infrastructure code.
This tutorial will walk you through the basics and practical use cases of conditional expressions and logical operators in Terraform with examples to solidify your understanding.
Table of Contents
What Are Conditional Expressions in Terraform?
At its core, a conditional expression in Terraform evaluates a condition and selects one of two values based on whether the condition is true or false. This concept is similar to the ternary operator used in many programming languages.
Instead of writing long repetitive blocks, you can make your Terraform configurations dynamic and smarter using these expressions — especially helpful when working with input variables, module arguments, and resource configurations.
Arithmetic and Comparison Operators
Before diving into conditional logic, it’s important to understand the foundational operators Terraform supports:
Arithmetic Operators
Terraform supports basic math operations like:
5 + 2 // Addition
10 - 3 // Subtraction
4 * 2 // Multiplication
8 / 2 // Division
These are useful when working with numeric input variables and need to compute derived values.
Equality and Comparison Operators
These return Boolean values (true or false) and are used to compare values.
==: Checks if two values are equal.!=: Checks if values are not equal.>,<,>=,<=: Standard numeric comparisons.
5 == 5 // true
"5" == 5 // false (type mismatch)
7 < 10 // true
Logical Operators
Logical operations are critical when combining multiple conditions.
AND (&&)
Returns true only if both conditions are true.
true && false // returns false
OR (||)
Returns true if at least one condition is true.
true || false // returns true
NOT (!)
Reverses the Boolean result of a condition.
!true // returns false
!false // returns true
Logical operators are frequently used in conditional expressions to enhance their logic.
The Power of Conditional Expressions
The real strength of conditional expressions in Terraform comes from their ability to make decisions directly inside your configuration files.
Syntax Overview
condition ? true_value : false_value
If the condition evaluates to true, true_value is returned; otherwise, false_value is used.
Practical Example: Enforcing Minimum Password Length
Let’s say you’re using the random_password resource and want to ensure the password is at least 8 characters long, even if a smaller value is passed.
Step 1: Define the Input Variable
variable "length" {
type = number
}
Step 2: Use Conditional Expression
resource "random_password" "default" {
length = var.length < 8 ? 8 : var.length
special = true
}
Here’s what happens:
- If the user inputs a value like 5, Terraform evaluates
var.length < 8as true, and the length becomes 8. - If the user inputs 12, the condition is false, and Terraform uses 12 directly.
This ensures your infrastructure always adheres to a minimum standard without writing lengthy if conditions or using external scripts.
Using Variables with Logical Operators
Terraform allows you to embed logic directly with variables.
variable "a" { default = 5 }
variable "b" { default = 10 }
output "result" {
value = var.a < var.b && var.a > 0 ? "Valid input" : "Invalid input"
}
This output changes dynamically based on the values of a and b, demonstrating how logical and conditional expressions can combine for powerful configuration control.
Testing with Terraform Console
Use the terraform console command to experiment with logical and conditional expressions before using them in real configurations.
Example:
> 5 < 8 ? "Yes" : "No"
"Yes"
This tool is especially handy when validating complex expressions or working with interpolations and nested logic.
Conclusion
Mastering conditional expressions in Terraform helps you write intelligent, error-proof, and reusable infrastructure code. These expressions, combined with logical operators, allow your configurations to adapt to inputs, avoid hardcoding, and reduce duplication.
By incorporating these techniques into your workflows, you’ll be able to build more scalable, modular, and production-ready Terraform code with minimal effort.
Frequently Asked Questions (FAQs)
1. What is a conditional expression in Terraform?
A conditional expression lets you assign values based on whether a condition is true or false using condition ? true_value : false_value.
2. Can I use conditional expressions in resource blocks?
Yes, conditional expressions are commonly used to assign resource arguments or control values like instance sizes, tags, or resource counts.
3. Are logical operators supported in Terraform?
Absolutely. Terraform supports && (AND), || (OR), and ! (NOT) to enhance your conditional logic.
4. What happens if my condition fails in Terraform?
If the condition is false, the value after the colon (:) is returned. Terraform won’t break unless your logic leads to invalid values.
5. How can I test expressions before applying?
Use the interactive terraform console command to safely test conditions and expressions without changing your infrastructure.