HCL Language – 13 – Conditional Expressions

Conditional Expressions in HCL

Conditional expressions are fundamental to HashiCorp Configuration Language (HCL). They enable you to make decisions and handle conditional logic within your Terraform configurations. In this guide, we’ll explore how conditional expressions work in HCL, their syntax, and real-world use cases.

Basic Syntax

Conditional expressions in HCL follow a straightforward syntax. They consist of three main parts: a conditional test, a value to return when the test is true, and a value to return when the test is false.


condition ? true_value : false_value
    

In this structure, if the “condition” is true, the expression evaluates to “true_value,” and if it’s false, the expression evaluates to “false_value.”

Example:

Let’s say you want to determine the maximum of two numbers, “a” and “b,” using a conditional expression:


max = a > b ? a : b
    

In this example, if “a” is greater than “b,” the value of “a” is assigned to the “max” variable; otherwise, “b” is assigned.

Complex Conditions

Conditional expressions can involve complex conditions by nesting them or using logical operators. You can combine multiple conditions to create intricate decision-making processes.


result = (condition1 && condition2) ? value1 : (condition3 || condition4) ? value2 : value3
    

In this example, the “result” is determined based on whether both “condition1” and “condition2” are true, or if “condition3” or “condition4” is true.

Real-World Use Cases

Conditional expressions are invaluable in HCL when defining Terraform configurations. Some common use cases include:

1. Resource Creation

You might conditionally create or configure resources based on variables or external data. For instance, you can create an AWS instance with a specific instance type only if a certain condition is met.


resource "aws_instance" "example" {
  instance_type = var.is_production ? "t2.large" : "t2.micro"
}
    
2. Variable Defaults

Conditional expressions help set default values for variables when they’re not explicitly defined. This ensures that your configuration remains resilient and adaptable.


variable "environment" {
  default = "development"
}

environment = var.environment != "" ? var.environment : "development"
    
3. Dynamic Outputs

You can generate dynamic outputs based on specific conditions, allowing you to return different values from your Terraform module.


output "instance_type" {
  value = var.is_production ? "t2.large" : "t2.micro"
}
    
Error Handling

Conditional expressions also come in handy for error handling within your Terraform code. You can use them to handle different error scenarios or to define fallback values when errors occur.


result = can(element(data.null_data_source.example.errors, 0)) ? data.null_data_source.example.errors[0] : "No errors found."
    
Summary

Conditional expressions are a pivotal part of HCL, providing the capability to make dynamic decisions and handle complex logic in your Terraform configurations. Whether for resource creation, variable defaults, dynamic outputs, or error handling, they enhance the flexibility and resilience of your infrastructure as code.