Skip to main content
README.md4.5 KB
View on GitHub

Generate Files

This example demonstrates how to use atmos terraform generate files to generate an entire Terraform component from stack configuration.

Overview

The generate section in component configuration defines files that Atmos will create. This example generates a complete Terraform component including:

  • variables.tf - Variable definitions
  • outputs.tf - Output definitions
  • versions.tf - Terraform version constraints
  • locals.tf - Local values
  • terraform.tfvars - Variable values
  • config.json - Environment-specific configuration
  • README.md - Component documentation

Content Types

Content TypeBehavior
String (multiline)Written as-is, supports Go templates
Map with .json extensionSerialized as pretty-printed JSON
Map with .yaml/.yml extensionSerialized as YAML
Map with .tf/.hcl extensionSerialized as HCL blocks
Map with .tfvars extensionSerialized as HCL attributes (no blocks)

HCL Generation

When using map syntax for .tf files, Atmos automatically handles:

  • Labeled blocks (variable, output, resource, data, module, provider):

    variable:
    app_name:
    type: string
    description: "Application name"

    Generates: variable "app_name" { type = "string" ... }

  • Unlabeled blocks (terraform, locals):

    terraform:
    required_version: ">= 1.0.0"

    Generates: terraform { required_version = ">= 1.0.0" }

Note: For blocks that need HCL expressions (like value = var.app_name), use string templates instead of map syntax.

Template Variables

Available in templates via {{ .variable }}:

VariableDescription
atmos_componentComponent name
atmos_stackStack name
varsComponent variables (map)
vars.stageStage from component vars

Auto-Generation

Enable automatic file generation on any terraform command:

# atmos.yaml
components:
terraform:
auto_generate_files: true

With this enabled, files are regenerated before init, plan, apply, etc.

Usage

Generate the component

cd examples/generate-files
mkdir -p components/terraform/demo
atmos terraform generate files demo -s dev

Preview without writing (dry-run)

atmos terraform generate files demo -s dev --dry-run

Delete generated files (clean)

atmos terraform generate files demo -s dev --clean

Generated Files

After running atmos terraform generate files demo -s dev:

versions.tf (HCL map syntax):

terraform {
required_version = ">= 1.0.0"
}

locals.tf (HCL map syntax with templates):

locals {
app_name = "myapp-dev"
environment = "dev"
}

variables.tf (string template):

variable "app_name" {
type = string
description = "Application name"
}

terraform.tfvars (flat HCL attributes):

app_name = "myapp-dev"
version = "1.0.0-dev"

config.json (JSON from map):

{
"app": "myapp-dev",
"stage": "dev",
"version": "1.0.0-dev"
}

Project Structure

generate-files/
├── atmos.yaml # Atmos configuration (auto_generate_files: true)
├── components/ # Generated (gitignored)
│ └── terraform/
│ └── demo/
│ ├── variables.tf # Generated
│ ├── outputs.tf # Generated
│ ├── versions.tf # Generated
│ ├── locals.tf # Generated
│ ├── terraform.tfvars # Generated
│ ├── config.json # Generated
│ └── README.md # Generated
└── stacks/
├── catalog/
│ └── demo.yaml # Component with generate section
└── deploy/
├── dev.yaml # Dev environment
└── prod.yaml # Prod environment

Try It

cd examples/generate-files

# Create component directory
mkdir -p components/terraform/demo

# Generate files for dev
atmos terraform generate files demo -s dev

# See what was generated
ls components/terraform/demo/
cat components/terraform/demo/versions.tf
cat components/terraform/demo/locals.tf

# Generate for prod (different values)
atmos terraform generate files demo -s prod
cat components/terraform/demo/config.json

# Clean up
atmos terraform generate files demo -s dev --clean

Related Documentation