DESCRIBE · PLAN · UNDERSTAND
IaC Academy
Turn an intention into a repeatable platform change. Build teams, connect identities, manage drift, compose reusable projects and package tested Lua.
A complete progression through core syntax, plans, ownership, files, helpers, Lua tests and modules. Real engines, local fixtures, no real deployments.
Foundations
Describe your first team
Create a Fulfillment team by describing its desired state. Inspect the real plan, then apply it to a simulated account.
Scenario 2 · 12 minAdd an existing person to a team
Look up Alice by email and connect her to Fulfillment with a managed membership. Keep ownership of her account outside IaC.
Scenario 3 · 12 minConnect identities, not strings
A reference carries a resource identity and a dependency. Repair the membership without guessing an ID.
Scenario 4 · 12 minOrganize a project across files
Split declarations into files without changing their identities or dependencies.
Plans and state
Read a create plan
Predict the proposed change before applying it to an empty simulated account.
Scenario 2 · 12 minUpdate an existing team
Change a managed description while keeping the resource address and platform identity.
Scenario 3 · 12 minRepair an out-of-band change
Someone changed the team description outside IaC. Restore the declared value.
Scenario 4 · 12 minLet the platform own a field
Use ignore_changes to stop overwriting a description maintained elsewhere.
Values and collections
Parameterize the stack
Declare a stack setting and use its value without duplicating it.
Scenario 2 · 12 minInterpolate and escape text
Use one substituted value and one deliberately literal placeholder.
Scenario 3 · 12 minCreate a keyed collection
Manage two teams with stable keys rather than positional copies.
Scenario 4 · 12 minLoad a CSV catalogue
Turn a supplied CSV into a stable keyed resource collection.
Files and artifacts
Load a file without interpreting it
Keep a long value in its own UTF-8 file and attach it to a field.
Scenario 2 · 12 minConvert and encode structured values
Build a typed object, serialize it, then extract its text for a string field.
Scenario 3 · 12 minUse YAML-compatible artifacts
Serialize a structured value with yamlencode and preserve its types.
Scenario 4 · 12 minKeep embedded source literal
Use a language-tagged heredoc without accidentally interpolating embedded source.
Scenario 5 · 12 minCompose and encode a native model
Use a schema-discovered virtual model and let xmlencode handle serialization.
Lua and tests
Package a typed Lua source
Attach a Lua file to a real script resource with the schema’s role enum.
Scenario 2 · 12 minAttach and run a Lua suite
Keep production code and tests separate, and run the actual subject locally.
Scenario 3 · 12 minChoose a profile and multiple suites
Use pure computation tests and give edge cases their own suite.
Reusable projects
Give resources a module boundary
Build a reusable team module with a required typed input and explicit output.
Scenario 2 · 12 minWire a module into its caller
Use the typed module output to connect Alice to the team without exposing its internals.
Scenario 3 · 12 minAssemble a reusable team project
Combine defaults, module inputs, confined files, typed outputs and user references in one working stack.
Continue in Integration Academy to compose integrations from typed virtual resources. Explore Integration Academy →