Concept index¶
The lookup table for everything else. Each row is one concept and every place it appears: the theory that defines it, the Stage 2 topic that isolates it, the GCP lab that runs it for real, the code that depends on it, and the quiz that checks whether you actually have it.
Read a row left to right when learning something new. Read it right to left when something
breaks and you need to find where the concept was explained. §N refers to the
theory pages, numbered 1–19.
Core mechanics¶
| Concept | Theory | Stage 2 | Stage 3 | Code | Quiz |
|---|---|---|---|---|---|
Providers, required_providers |
§2 | Provider versions | Lab 1 | 01-basics/7-version-constraints/, */infra/versions.tf |
Providers |
Provider auth (ADC, google_client_config) |
§2, §11 | — | Prereqs | backend/infra/providers.tf |
Providers |
| Provider block defaults vs resource-level args | §2 | Provider versions | Core root | 02-gcp-terraform/01-core-gcp-resources/main.tf |
Providers |
| Provider aliasing (multi-region/project) | §2 | — | Lab 14 | — | — |
terraform init |
§3 | Provider versions | — | — | Providers |
| Version constraints & the lock file | §3 | Provider versions | — | 01-basics/7-version-constraints/ |
— |
| Resource identity & force-replacement | §5 | Resources and state | — | — | GKE |
| Resources vs data sources | §11 | Data sources | Lab 7 | 01-basics/6-data-sources/, 02-gcp-terraform/01-core-gcp-resources/data.tf |
Resources |
| Implicit vs explicit dependencies | §6 | References and dependencies | Lab 3 | 01-basics/4-dependencies/, backend/infra/main.tf |
— |
The dependency graph (terraform graph) |
§6 | References and dependencies | Core root | 01-basics/4-dependencies/implicit/graph.svg |
— |
State¶
| Concept | Theory | Stage 2 | Stage 3 | Code | Quiz |
|---|---|---|---|---|---|
| State file & the apply model | §4 | Resources and state | Lab 1 | 01-basics/1-create-local-file/ |
Resources |
| Remote backends (GCS) | §14 | — | Lab 2 | 02-gcp-terraform/01-core-gcp-resources/backend.tf |
— |
| Drift, refresh, import | §13 | State surgery | Lab 11 | — | Resources |
State surgery (mv/rm/import) |
§13 | State surgery | Lab 6 | — | Resources |
| State file security & sensitive values | §14 | Validation and sensitive values | — | infrastructure/infra/secrets.tf |
— |
| Workspaces | §13 | — | Lab 10 | backend/infra/terraform.tfstate.d/ |
Variables |
Expressions & structure¶
| Concept | Theory | Stage 2 | Stage 3 | Code | Quiz |
|---|---|---|---|---|---|
| Variables & precedence | §7 | Variables | Lab 15 | 01-basics/2-variable-use/, 02-gcp-terraform/01-core-gcp-resources/terraform.tfvars |
Variables |
| Variable validation | §7 | Validation | — | — | — |
locals |
§7 | Locals | Lab 8 | 02-gcp-terraform/01-core-gcp-resources/locals.tf |
— |
for expressions, try, one, splat |
§8 | — | Lab 13 | sample-program/infra/main.tf |
Variables |
| Outputs | §10 | Outputs | Lab 7 | 02-gcp-terraform/01-core-gcp-resources/outputs.tf, */infra/outputs.tf |
— |
| Attribute references | §6 | References and dependencies | — | 01-basics/3-resource-attribute-reference/ |
— |
count |
§9 | count and for_each | Lab 4 | 02-gcp-terraform/01-core-gcp-resources/resources.tf (commented) |
Variables |
Conditionals / count = 0 |
§8 | Conditionals | — | backend/infra/cloudsql.tf |
Variables |
for_each |
§9 | count and for_each | Lab 5 | 02-gcp-terraform/01-core-gcp-resources/resources.tf, backend/infra/iam.tf |
Variables |
for_each over modules |
§9, §12 | — | Lab 13 | sample-program/infra/main.tf |
Variables |
| Guard propagation | §8 | Conditionals | Lab 13 | sample-program/infra/main.tf |
Variables |
dynamic blocks |
§9 | — | Lab 12 | 02-gcp-terraform/01-core-gcp-resources/resources.tf, backend/infra/rbac.tf |
— |
| Modules | §12 | — | Lab 9 | 02-gcp-terraform/01-core-gcp-resources/modules/gcp-vm/, sample-program/infra/modules/ |
— |
lifecycle meta-arguments |
§5 | Lifecycle | Lab 16 | 01-basics/5-lifecycle/, cloudsql/infra/cloudsql.tf |
— |
Provisioners / null_resource |
§16 | Provisioners | Lab 17 | — | — |
archive_file |
— | archive_file | — | — | — |
| File naming conventions | §17 | Conventions | Core root | 02-gcp-terraform/01-core-gcp-resources/ |
— |
| Root boundaries & blast radius | §17 | — | — | acme-.../ (5 roots) |
— |
Multi-repo & platform¶
| Concept | Theory | Stage 2 | Stage 3 | Code | Quiz |
|---|---|---|---|---|---|
Cross-repo sharing: Consul KV vs terraform_remote_state |
§15 | — | Lab 18 | sample-program/infra/main.tf, infrastructure/infra/outputs.tf |
Multi-repo |
| Publish/consume ordering & failure modes | §15 | — | — | backend/infra/main.tf |
Multi-repo |
| Resource ownership across repo boundaries | §15 | — | — | infrastructure/infra/iam.tf |
Multi-repo |
| GKE clusters & node pools | — | — | — | sample-program/infra/modules/gke/main.tf |
GKE |
| Node service accounts | — | — | — | sample-program/infra/modules/gke/main.tf |
GKE |
| Workload Identity (GSA ↔ KSA annotation) | — | — | — | backend/infra/main.tf, frontend/infra/main.tf |
GKE |
| Node capacity vs allocatable | — | — | — | sample-program/infra/terraform.tfvars |
GKE |
| Kubernetes RBAC from Terraform | — | — | — | backend/infra/rbac.tf |
GKE |
helm_release |
— | — | — | backend/infra/main.tf, frontend/infra/vip.tf |
— |
| GitOps / CI-CD execution model | §16 | — | — | .github/workflows/publish-docs.yml |
— |
Independent verification (not trusting apply) |
§15 | — | — | acme-.../verify-session.sh |
Debugging |
| Hypothesis-ordered debugging | — | — | — | Session 3 | Debugging |
Gaps¶
Honest list of what has a theory entry or a lab but no counterpart elsewhere, so it's clear what's genuinely covered versus what only looks covered:
- Six Stage 2 topics have no folder under
01-basics/— locals,count/for_each, conditionals, validation and sensitive values, state surgery, and provisioners. The code on each page is runnable; it just has no committed home. See the not-yet-implemented list. - No GCP lab for variable validation or sensitive variables — both are Stage 2 only.
- The GKE/Workload Identity/Helm rows have no theory page. That's deliberate — they're platform knowledge rather than Terraform mechanics — but it does mean the only explanation of them lives in the quiz and the session notes.
helm_release, Kubernetes RBAC and Cloud SQL exist only in the sandbox, with no isolated lab to learn them in. They were learned in-place during sessions 2 and 3.archive_filehas no theory entry and no GCP lab — it's a single Stage 2 page.- 19 of the rows above have no quiz question at all. The quiz grew out of things that
actually broke in live sessions, so it over-covers what went wrong — providers, guards,
GKE, Consul — and under-covers what simply worked first time. The honest gaps worth
closing first are the ones that are core mechanics rather than reference material:
outputs,
locals, attribute references, implicit vs explicit dependencies,lifecyclemeta-arguments, variable validation, and remote backends. Each already has a theory page and a lab; nothing tests them. A missingQuiz:link in a page footer means exactly this, and not an oversight.
Closed since the last revision: count, for_each, dynamic, modules, workspaces,
lifecycle meta-arguments and provider aliasing all now have theory sections
(§9, §12,
§13, §5,
§2).
Maintaining this page¶
Add a row when a session introduces a concept that isn't already listed. A row with only a
Code cell filled in is a signal, not a defect — it means you've used something in the
sandbox that you've never isolated in a lab or tested in the quiz, which is exactly the
thing that later turns into a debugging session.