Bird
Raised Fist0
Terraformcloud~5 mins

Variable validation rules in Terraform - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is the purpose of variable validation rules in Terraform?
Variable validation rules check if the input values meet certain conditions before applying changes. They help catch errors early and ensure correct configurations.
Click to reveal answer
beginner
How do you define a validation rule for a variable in Terraform?
Inside the variable block, use the validation block with a condition expression and an error_message to explain the rule.
Click to reveal answer
intermediate
Example: Write a validation rule that ensures a variable port is between 1024 and 65535.
validation { condition = var.port >= 1024 && var.port <= 65535 error_message = "Port must be between 1024 and 65535." }
Click to reveal answer
beginner
What happens if a variable value does not meet the validation condition in Terraform?
Terraform stops the run and shows the error message defined in the validation block. This prevents applying invalid configurations.
Click to reveal answer
intermediate
Can validation rules use complex expressions or functions in Terraform?
Yes, validation conditions can use any valid Terraform expressions and functions to create flexible and powerful checks.
Click to reveal answer
Where do you place the validation rules for a variable in Terraform?
AInside the variable block
BIn the provider block
CIn the output block
DIn the terraform block
What does Terraform do if a variable fails its validation rule?
AAutomatically fixes the variable
BIgnores the error and continues
CShows an error and stops the run
DLogs a warning but applies changes
Which of these is a valid validation condition for a string variable env to allow only 'dev', 'test', or 'prod'?
Acontains(["dev", "test", "prod"], var.env)
Bvar.env == "dev" || var.env == "test" || var.env == "prod"
Cvar.env in ["dev", "test", "prod"]
DAll of the above
What is the purpose of the error_message in a validation block?
ATo describe the validation rule to users when it fails
BTo fix the variable automatically
CTo log the variable value
DTo set a default value
Can validation rules in Terraform use functions like length() or regex()?
ANo, only simple comparisons are allowed
BYes, any Terraform expression is allowed
COnly regex is allowed
DOnly length() is allowed
Explain how to add a validation rule to a Terraform variable and why it is useful.
Think about checking inputs before applying changes.
You got /6 concepts.
    Describe what happens when a Terraform variable value does not meet its validation condition during a plan or apply.
    Consider how Terraform protects your infrastructure.
    You got /4 concepts.

      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'