Bird
Raised Fist0
Terraformcloud~10 mins

Variable validation rules in Terraform - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a variable with a description.

Terraform
variable "region" {
  type        = string
  description = [1]
}
Drag options to blanks, or click blank then click option'
Aaws_region
B"AWS region to deploy resources"
Cstring
Ddefault = "us-east-1"
Attempts:
3 left
💡 Hint
Common Mistakes
Using variable name instead of a description string
Omitting quotes around the description
2fill in blank
medium

Complete the code to add a validation rule that ensures the variable is not empty.

Terraform
variable "environment" {
  type = string

  validation {
    condition     = [1]
    error_message = "Environment cannot be empty."
  }
}
Drag options to blanks, or click blank then click option'
Avar.environment == ""
Bvar.environment != null
Clength(var.environment) > 0
Dvar.environment == null
Attempts:
3 left
💡 Hint
Common Mistakes
Checking for equality with empty string instead of length
Using null checks which are not appropriate for strings
3fill in blank
hard

Fix the error in the validation condition to allow only values 'dev', 'staging', or 'prod'.

Terraform
variable "stage" {
  type = string

  validation {
    condition     = contains([[1]], var.stage)
    error_message = "Stage must be one of: dev, staging, prod."
  }
}
Drag options to blanks, or click blank then click option'
A["dev", "staging", "prod"]
B"dev", "staging", "prod"
Cdev, staging, prod
D"dev staging prod"
Attempts:
3 left
💡 Hint
Common Mistakes
Using a string instead of a list
Omitting square brackets around the list
4fill in blank
hard

Fill both blanks to validate a number variable is between 1 and 10 inclusive.

Terraform
variable "instance_count" {
  type = number

  validation {
    condition     = var.instance_count [1] 1 && var.instance_count [2] 10
    error_message = "Instance count must be between 1 and 10."
  }
}
Drag options to blanks, or click blank then click option'
A>=
B<=
C>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using strict greater than or less than which excludes boundary values
Swapping the operators
5fill in blank
hard

Fill all three blanks to validate a list variable contains only allowed strings.

Terraform
variable "allowed_zones" {
  type = list(string)

  validation {
    condition     = alltrue([for zone in var.allowed_zones : zone [1] [[2]]])
    error_message = "Zones must be one of the allowed values."
  }
}
Drag options to blanks, or click blank then click option'
Ain
B"us-east-1a", "us-east-1b", "us-east-1c"
Ccontains
D"us-west-2a", "us-west-2b", "us-west-2c"
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'contains' incorrectly as an operator instead of a function
Not using a for expression to check each item
Providing the wrong list of zones

Practice

(1/5)
1. What is the main purpose of variable validation rules in Terraform?
easy
A. To speed up the Terraform apply process
B. To automatically fix errors in the Terraform code
C. To create new variables dynamically during runtime
D. To check if input values meet specific conditions before applying configuration

Solution

  1. Step 1: Understand variable validation role

    Variable validation rules ensure inputs are correct before Terraform uses them.
  2. Step 2: Identify the purpose

    They check conditions and show errors if inputs are invalid, preventing mistakes.
  3. Final Answer:

    To check if input values meet specific conditions before applying configuration -> Option D
  4. Quick Check:

    Validation checks inputs = C [OK]
Hint: Validation rules check inputs before use to avoid errors [OK]
Common Mistakes:
  • Thinking validation fixes errors automatically
  • Confusing validation with variable creation
  • Assuming validation speeds up apply
2. Which of the following is the correct syntax to add a validation rule for a variable in Terraform?
easy
A. variable "name" { validation { condition = length(var.name) > 3 error_message = "Name too short" } }
B. variable "name" { validate { condition = length(var.name) > 3 message = "Name too short" } }
C. variable "name" { validation_rule { check = length(var.name) > 3 error = "Name too short" } }
D. variable "name" { validate_rule { condition = length(var.name) > 3 error_message = "Name too short" } }

Solution

  1. Step 1: Recall Terraform variable validation syntax

    Terraform uses validation block inside variable with condition and error_message.
  2. Step 2: Match syntax with options

    variable "name" { validation { condition = length(var.name) > 3 error_message = "Name too short" } } matches correct keywords and structure exactly.
  3. Final Answer:

    variable "name" { validation { condition = length(var.name) > 3 error_message = "Name too short" } } -> Option A
  4. Quick Check:

    Correct keywords: validation, condition, error_message = A [OK]
Hint: Look for 'validation' block with 'condition' and 'error_message' keys [OK]
Common Mistakes:
  • Using 'validate' instead of 'validation'
  • Using wrong keys like 'message' or 'error'
  • Incorrect block names like 'validation_rule'
3. Given this variable definition, what happens if the input is "ab"?
variable "username" {
  type = string
  validation {
    condition = length(var.username) >= 3
    error_message = "Username must be at least 3 characters"
  }
}
medium
A. Terraform apply ignores the validation and warns only
B. Terraform apply succeeds and uses "ab" as username
C. Terraform apply fails with error: Username must be at least 3 characters
D. Terraform apply replaces "ab" with default username

Solution

  1. Step 1: Check validation condition

    The condition requires username length >= 3.
  2. Step 2: Evaluate input "ab" length

    "ab" length is 2, which is less than 3, so condition fails.
  3. Final Answer:

    Terraform apply fails with error: Username must be at least 3 characters -> Option C
  4. Quick Check:

    Input length < 3 triggers error = A [OK]
Hint: Check if input meets condition; if not, apply fails with error [OK]
Common Mistakes:
  • Assuming apply succeeds despite validation failure
  • Thinking validation only warns, not errors
  • Believing default values replace invalid input
4. Identify the error in this variable validation block:
variable "port" {
  type = number
  validation {
    condition = var.port > 0 && var.port < 65536
    error_message = "Port must be between 1 and 65535"
  }
}
medium
A. Using 'number' type instead of 'number' is invalid
B. Validation condition uses 'var.port' instead of 'self'
C. Error message is missing a period at the end
D. Validation block must be outside the variable block

Solution

  1. Step 1: Understand validation condition context

    Inside validation, use self to refer to the variable value, not var.port.
  2. Step 2: Identify incorrect usage

    The condition incorrectly uses var.port, which is not best practice.
  3. Final Answer:

    Validation condition uses 'var.port' instead of 'self' -> Option B
  4. Quick Check:

    Use 'self' in validation condition = B [OK]
Hint: Use 'self' to refer to variable value inside validation [OK]
Common Mistakes:
  • Using 'var.variable_name' inside validation condition
  • Placing validation block outside variable block
  • Ignoring syntax errors in condition
5. You want to validate a list variable so it only accepts lists with exactly 3 strings, each at least 2 characters long. Which validation condition is correct?
hard
A. condition = length(self) == 3 && all([for s in self : length(s) >= 2])
B. condition = length(self) == 3 && all([for s in self : s > 2])
C. condition = length(self) == 3 && alltrue([for s in self : s >= 2])
D. condition = length(self) == 3 && alltrue([for s in self : length(s) >= 2])

Solution

  1. Step 1: Check list length condition

    We want exactly 3 items, so length(self) == 3 is correct.
  2. Step 2: Validate each string length

    Use all() to ensure all elements satisfy length(s) >= 2.
  3. Step 3: Identify correct function and condition

    all() is the modern function; alltrue() is legacy.
  4. Final Answer:

    condition = length(self) == 3 && all([for s in self : length(s) >= 2]) -> Option A
  5. Quick Check:

    Use 'all' with length checks and list length = D [OK]
Hint: Use 'all' function and 'self' for list validation [OK]
Common Mistakes:
  • Using 'alltrue' instead of 'all'
  • Comparing strings directly to numbers
  • Using 's > 2' instead of 'length(s) >= 2'