← ClaudeAtlas

terraform-conventionslisted

Use whenever writing, editing, or reviewing Terraform (.tf/.hcl files, anything under a terraform/ directory) in a NASA-PDS repository. Enforces the org's Must-Have Terraform requirements (remote state, locking, tagging, naming, SSM interface, version pinning, IAM/auth) and Should-Have recommendations. Trigger on any task involving Terraform modules, backends, providers, variables, or AWS infrastructure-as-code in PDS/PDC repos.
NASA-PDS/pds-agent-skills · ★ 1 · DevOps & Infrastructure · score 67
Install: claude install-skill NASA-PDS/pds-agent-skills
# PDS/PDC Terraform Conventions You are working in a repository that follows PDS/PDC's org-wide Terraform Development Guidelines. Full text with rationale, citations, and code examples: `TERRAFORM_GUIDELINES.md` (co-located with this skill; the canonical copy lives in `NASA-PDS/tf-sheriff`) — read it if you need the "why" behind a rule or a full code example. ## Before writing or editing any Terraform Confirm the change satisfies every applicable item below. If it's a new module, all of them apply. 1. **Structure**: `terraform/` at repo root (or the correct module subdirectory); `main.tf`, `variables.tf`, `outputs.tf`, `versions.tf`, `README.md` present. Provider config only in `providers.tf`, only in root modules — never inside a reusable module. 2. **State**: every deployable module has a `backend.tf` (S3, no hardcoded values) plus a `backend-<venue>.hcl`. Bucket name is `pds-<venue>-infra`. Locking is actually wired (`use_lockfile = true` or a real DynamoDB table) — do not leave it as a comment. 3. **Versions**: `versions.tf` sets `required_version` and a `~>`-pinned (root) or ranged (reusable module) `required_providers` block. Commit `.terraform.lock.hcl`. 4. **Variables/outputs**: every variable has `type` + `description`. Environment-specific values (ARNs, account IDs, component names) get no default — the caller must supply them. Every output has a `description`. 5. **Secrets**: never hardcode an ARN, account ID, password, or API key in a `.tf` file. Use a variabl