Getting started
Quick start
Write a first spec for a two-machine environment, validate it and see where it can run.
This walks through a small environment: a web application and its database, on one network.
1. Write the spec
Isoloom reads isoloom.yml at the root of a project (isoloom.yaml works too). Create it:
version: 1
name: invoice-portal
networks:
app: { cidr: 10.20.0.0/24 }
machines:
database:
networks: { app: 32 }
services: [{ port: 5432, name: postgres }]
docker: { image: "postgres:16" }
vm: { os: debian-12, provision: [provision/database.sh] }
web:
networks: { app: 31 }
services: [{ port: 8080, http: true }]
depends_on: [database]
docker: { build: build/web }
vm: { os: debian-12, provision: [provision/web.sh] }
checks:
- checks/portal-answers.sh
Each machine sits on the app network at a fixed address (.31 and .32). Each has two
implementations: a container and a Debian VM. web waits for database to answer before it
starts.
2. Validate it
isoloom validate
✓ invoice-portal is valid
When something is wrong, Isoloom names the exact field and says what to do:
✗ machines.web.depends_on[0]: no machine named `databse`
✗ machines.web.vm.provision[0]: `provision/web.sh` doesn't exist in the project folder
2 problems
3. See where it can run
isoloom targets
✓ docker
✓ hosted
✓ cloud-docker
✓ vagrant
✓ proxmox
✓ cloud-vm
✓ ludus
Both machines have both implementations, so every target is possible. Remove the docker: line
from database and the three Docker targets disappear, with the reason:
✗ docker (needs `docker:` on database)
4. Size it
isoloom resources
2 machines · 2 CPUs · 2.0 GB memory · 40 GB disk (as VMs)
Next
- Concepts: behavior, implementations, derived targets.
- Spec reference: every field.