OpenTofu infrastructure-as-code reference for HCL syntax, state management, module design, and provider configuration...
Infrastructure-as-code reference for OpenTofu configurations, state management, and provider patterns.
OpenTofu is the open-source fork of Terraform, maintained by the Linux Foundation. Commands and syntax are nearly identical to Terraform.
# Core workflow
tofu init # Initialize, download providers
tofu validate # Syntax validation
tofu fmt -recursive # Format HCL files
tofu plan # Preview changes
tofu apply # Apply changes
# Inspection
tofu state list # List resources in state
tofu state show <resource> # Show resource details
tofu graph | dot -Tsvg > graph.svg # Dependency graph
# Debug
TF_LOG=DEBUG tofu plan 2>debug.log
init → validate → fmt → plan → apply
OpenTofu is a drop-in replacement for Terraform:
# Replace terraform with tofu in commands
terraform init → tofu init
terraform plan → tofu plan
terraform apply → tofu apply
# State files are compatible
# Provider configurations work the same
# Most modules work without changes
Key differences:
tofu vs terraform)Load on-demand based on task:
| Topic | File | When to Load |
|---|---|---|
| Troubleshooting | troubleshooting.md | Common errors, debugging |
| State | state-management.md | Backends, locking, operations |
| Modules | module-design.md | Module patterns, composition |
| Security | security.md | Secrets, state security |
| Migration | migration.md | Terraform → OpenTofu |
| Proxmox Gotchas | proxmox/gotchas.md | Critical provider issues |
| Proxmox Auth | proxmox/authentication.md | Provider config, API tokens |
| Proxmox VMs | proxmox/vm-qemu.md | proxmox_vm_qemu patterns |
Before tofu apply:
tofu init completed successfullytofu validate passestofu fmt appliedtofu plan reviewed (check destroy/replace operations)sensitive = true(highest to lowest)
-var flag: tofu apply -var="name=value"-var-file flag: tofu apply -var-file=prod.tfvars*.auto.tfvars files (alphabetically)terraform.tfvars fileTF_VAR_* environment variablesvariables.tf# versions.tf
terraform {
required_version = ">= 1.6.0" # OpenTofu version
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "~> 3.0"
}
}
}