Skip to content

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
FieldWhat it does
descriptionShown by isoloom profiles.
targetThe target this profile runs on. It is the default when no target is given, and asking for another one is an error.
specValues merged into the spec, leaf by leaf, before any -s override.
defaultsA layer of defaults, between the project's file and --images. isoloom defaults names the profile as the source of what it sets.
inputsValues 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.