atmos terraform validate
Use this command to validate the Terraform HCL configuration files (.tf files) for an Atmos component in a stack, checking for syntax and consistency errors. This validates Terraform code, not Atmos stack YAML configurations.
Usage​
Execute the terraform validate command like this:
atmos terraform validate <component> -s <stack> [options]
This command validates the Terraform HCL configuration files in a component directory, referring only to the configuration and not accessing any remote services such as remote state, provider APIs, etc.
Atmos provides standard setup for this command including automatic terraform init and workspace selection. The validation itself is performed by native Terraform.
Configuration​
Configure validation behavior in your atmos.yaml:
components:
terraform:
# Always run init before validate
init_run_reconfigure: false
# Auto-generate backend file for validation
auto_generate_backend_file: true
Validation includes:
- Checking for syntax errors
- Verifying internal consistency
- Ensuring all required arguments are specified
- Checking that all variables are declared
- Validating output value expressions
- Ensuring resource configurations are complete
Examples​
Basic Validation​
Validate a component in a stack:
atmos terraform validate vpc -s dev
Validation with JSON Output​
Get validation results in JSON format for parsing:
atmos terraform validate vpc -s dev -json
Skip Initialization​
Validate without running terraform init first:
atmos terraform validate vpc -s dev --skip-init
When to Use Validate​
Pre-Deployment Checks​
Run validation before planning or applying:
# Validate first
atmos terraform validate app -s prod
# Then plan if validation succeeds
atmos terraform plan app -s prod
After Configuration Changes​
Always validate after modifying Terraform configurations:
# After editing *.tf files
atmos terraform validate component -s stack
# After updating module versions
atmos terraform validate component -s stack
Arguments​
component(required)Atmos component name to validate.
Flags​
--stack/-s(required)Atmos stack name where the component is defined.
--skip-init(optional)Skip running
terraform initbefore validation. Use this when you know the working directory is already initialized.atmos terraform validate vpc -s dev --skip-init--dry-run(optional)Show what would be executed without actually running the command.
atmos terraform validate vpc -s dev --dry-run
Native Terraform Flags​
The atmos terraform validate command supports all native terraform validate flags:
-jsonOutput the validation result in JSON format. This is useful for programmatic processing of validation results.
atmos terraform validate vpc -s dev -jsonExample JSON output:
{
"valid": true,
"error_count": 0,
"warning_count": 0,
"diagnostics": []
}-no-colorDisable color codes in the output.
atmos terraform validate vpc -s dev -no-color
Common Validation Errors​
Missing Required Arguments​
Error: Missing required argument
The argument "vpc_id" is required, but no definition was found.
Solution: Add the missing argument to your configuration or variables.
Undeclared Variables​
Error: Reference to undeclared variable
A variable named "instance_type" is not declared.
Solution: Declare the variable in a variables.tf file or in your Atmos stack configuration.
Invalid Resource Configuration​
Error: Invalid resource type
The resource type "aws_not_real" is not supported by provider "aws".
Solution: Check the resource type name and ensure you're using valid resource types.
Syntax Errors​
Error: Argument or block definition required
An argument or block definition is required here. To set an argument, use the
equals sign "=" to introduce the argument value.
Solution: Fix the syntax error in your Terraform configuration files.
Best Practices​
1. Validate Early and Often​
Run validation:
- After every configuration change
- Before running
planorapply - As part of your CI/CD pipeline
- During code reviews
2. Use in Pre-Commit Hooks​
Add validation to your pre-commit hooks:
# .pre-commit-config.yaml
- repo: local
hooks:
- id: terraform-validate
name: Terraform Validate
entry: atmos terraform validate
language: system
files: \.tf$
3. Combine with Other Checks​
Use validation alongside other quality checks. For security scanning with tools like tfsec, checkov, or terrascan, use JSON planfiles generated with atmos terraform generate planfile for more accurate analysis.
This integration is best implemented using Atmos custom commands with embedded shell scripts:
# atmos.yaml
commands:
- name: security-scan
description: Run security checks on component
steps:
- atmos terraform fmt {component} -s {stack} -check
- atmos terraform validate {component} -s {stack}
- atmos terraform generate planfile {component} -s {stack}
- checkov -f ./{component}-{stack}.planfile.json
4. Parse JSON Output​
Use JSON output for automated processing:
# Check validation status
result=$(atmos terraform validate vpc -s dev -json)
valid=$(echo $result | jq -r '.valid')
if [ "$valid" = "false" ]; then
echo "Validation failed!"
echo $result | jq -r '.diagnostics[]'
exit 1
fi
Related Commands​
atmos terraform plan- Generate execution planatmos terraform fmt- Format configuration filesatmos terraform init- Initialize working directory
Use terraform validate as the first step in your deployment pipeline to catch configuration errors early before they can affect your infrastructure.