appliance.yaml. For a walk through the wizard, see Deploy the appliance.
Where the configuration comes from
Every way ends in one file,/etc/celum-appliance/appliance.yaml. At boot the appliance resolves its configuration in this order, and the first source that exists wins:
/etc/celum-appliance/appliance.yaml, if the file exists. The first boot writes it from the sources below, so from then on the file is the configuration. Later changes to the wizard’s answers in vCenter are ignored, and an edit you make to the file is never overwritten by them.- The OVF properties that vCenter hands to the VM at power-on (
guestinfo.ovfEnv): the answers from the deploy wizard, or from aPropertyMappingin a scripted deploy. Two things are applied over them:guestinfo.celum.<key>values in the VM’s advanced settings. A non-empty one wins over the wizard’s answer for the same key.celum.appliance_yaml, if set, replaces everything else: the appliance reads that whole document and ignores every other key.
celum-appliance bootstrap --from-ovf. To see the configuration the appliance resolved, and any warnings about it, run celum-appliance config.
SSH access is applied first. The SSH keys and the root password are read and applied before anything else, so a configuration the appliance refuses still lets you in to fix it. Edit
/etc/celum-appliance/appliance.yaml and run celum-appliance bootstrap again: it picks up where it stopped.What is injected, and what is not
On vSphere the appliance receives only what is listed above: OVF properties andguestinfo.celum.<key> values. The deploy injects no cloud-init user-data, and no certificates or secret-store material beyond the keys in the table below. The image does carry cloud-init, which reads a NoCloud seed. That is the way to configure the appliance’s qcow2 disk on Proxmox or libvirt: a write_files entry that writes /etc/celum-appliance/appliance.yaml.
The appliance generates its own secrets at the first boot:
- OpenBao’s unseal key, root token and recovery key;
- the CA, unless you supply a signing CA;
- Authentik’s secret key, and every service’s passwords, tokens and OIDC client secrets;
- Omni’s etcd encryption key.
/etc/celum-appliance/secrets. With escrow recipients (or SSH keys) set, the ones a restore cannot do without are also encrypted to those recipients and copied to the backup bucket.
Settings
All keys are optional except the two marked*. A blank value means the default. In the wizard, sections appear in the order below.
Fields that carry a file take its base64:
celum.tls_cert, celum.tls_key, celum.tls_ca_cert, celum.tls_ca_key and celum.appliance_yaml. A raw PEM or YAML is refused at first boot, because a one-line field loses its line breaks. Linux: base64 -w0 FILE. macOS: base64 -i FILE. PowerShell: [Convert]::ToBase64String([IO.File]::ReadAllBytes((Resolve-Path FILE))).Lists are comma-separated: SSH keys, DNS servers, search domains, extra DNS zones, escrow recipients, and ACME credentials (NAME=value,NAME=value).Identity
Networking
TLS
Components
Updates
Advanced
Not in the wizard
These keys are not shown in the wizard, on purpose. You can set them through automation, as aguestinfo.celum.<key> value or inside celum.appliance_yaml.
Configure it from automation
govc
Export the spec, set aValue for each key you need under PropertyMapping, and import the OVA without powering it on:
True or False. vCenter refuses true and fails the whole import over it. A file goes in as its base64:
PropertyMapping value for a key the wizard hides, without an error. Set those as guestinfo values instead, before the first power-on, because the appliance reads its configuration only once:
A complete appliance.yaml
To keep the whole configuration in one versioned document, put it incelum.appliance_yaml as base64. Every other key is then ignored, so the document must carry everything, including domain and admin. A key the appliance does not know is a fatal error, not a no-op. The simplest way to get a valid document is to deploy one appliance from the wizard and run celum-appliance config on it.
Validation at first boot
The appliance checks its configuration before it starts anything. It stops with a message naming the key when:domainoradmin.emailis missing or malformed;- a field that carries a file is not base64, or does not decode to a PEM file;
- a
byocertificate does not cover every name the appliance serves, or the signing CA and its key do not match; - an address is given without a gateway;
- Authentik is off while IAM is on;
- the Harbor project name is not one Harbor accepts, the Omni account ID is not a UUID, or the administrator group is Authentik’s own
authentik Admins.
acme-dns01 switches Omni off, because Omni serves its own certificate and ACME certificates stay inside the appliance’s web proxy. celum-appliance config lists every such warning.