Reference
Profiles
One spec, one file per customer or site: the target it runs on, the spec values that differ, a layer of defaults and the inputs, checked against the spec.
A product has one spec and many places to run it. One customer runs it on Proxmox without
internet, another on AWS in their own region, a third on local VMs with a bigger web server.
Without profiles, those differences end up in forks of the spec or in lists of -s overrides
kept somewhere else. A profile is one file per customer or site, kept with the project, that
says only what differs.
Profiles arrive in the next release.
A profile
Profiles live in profiles/<name>.yml next to isoloom.yml. The name is kebab-case.
# profiles/bank-fr.yml
description: Bank, Paris site
target: proxmox
spec:
networks: { lan: { internet: false } }
machines: { web: { resources: { cpus: 4, memory_mb: 8192 } } }
defaults:
images: { os: { debian-12: { proxmox: local:iso/debian-12-bank.qcow2 } } }
inputs:
REGISTRY: registry.bank.local
| Field | What it does |
|---|---|
description | Shown by isoloom profiles. |
target | The target this profile runs on. It is the default when no target is given, and asking for another one is an error. |
spec | Values merged into the spec, leaf by leaf, before any -s override. |
defaults | A layer of defaults, between the project's file and --images. isoloom defaults names the profile as the source of what it sets. |
inputs | Values for the spec's launch-time inputs. An input already set in the environment wins. |
Every field is optional. Unknown fields are errors.
Using one
Every command takes --profile <name>, or reads ISOLOOM_PROFILE:
isoloom generate --profile bank-fr # only proxmox, the target it pins
isoloom run --profile bank-fr
isoloom defaults --profile bank-fr # what wins, and which layer set it
ISOLOOM_PROFILE=bank-fr isoloom test
isoloom run records the profile with the running environment, and isoloom status shows it in
brackets after the target.
Order
For the spec: the spec's own values, then the profile's spec, then -s.
For the defaults: built in, your file, the project's file, the profile, --images, the
environment, then -s defaults.<key>.
Checked against the spec
A profile names only what the spec has. A machine, network or input the spec lacks is an error, so renaming a machine can't leave a profile silently doing nothing.
isoloom profiles lists the project's profiles and checks each one: the names it uses, the spec
it makes, and that its target can run that spec. It exits non-zero when one fails, so a single CI
step covers every customer and site.
$ isoloom profiles
✓ bank-fr proxmox Bank, Paris site
✗ retail vagrant Retail, Lyon
profile `retail`: `spec.machines.wbe`: the spec has no machine `wbe`
--json prints each profile with its name, target, description, ok and problems.