rescriptum
Formats and endpoint aliases
Guide
Formats and endpoint aliases
Formats and endpoint aliases
Three tables. The narrative version is in one document per operating system.
Document extensions
The allowlist of extensions rescriptum will pick up from a store. Anything else is
ignored — txt is deliberately not on the list, so a stray notes file next to your
answers never becomes a candidate.
| Extension | Family | Layering | Content-Type |
|---|---|---|---|
toml | TOML | structural merge | text/plain; charset=utf-8 |
yaml, yml | YAML | structural merge | text/yaml; charset=utf-8 |
json, ign | JSON | structural merge | application/json |
xml, autoyast, unattend | XML | structural merge, by element | application/xml; charset=utf-8 |
ks, cfg, preseed, seed, ipxe | text | concatenation in layer order | text/plain; charset=utf-8 |
The family is what the log line’s format= field reports, so ks and preseed both
appear as format=text. The extension is what an endpoint filters on, and what
check needs in order to pick the right validator.
Endpoint aliases
A path segment naming one of these restricts the answer to documents with the listed
extensions. Any segment of the path may name it, so /rhel/ks, /ks and
/provision/rhel/node.cfg all restrict to kickstart.
| Segment | Serves | Typical use |
|---|---|---|
proxmox, pve, toml | .toml | Proxmox VE |
debian, preseed | .preseed, .seed | Debian preseed |
rhel, centos, fedora, alma, rocky, kickstart, ks | .ks | kickstart |
ubuntu, autoinstall, cloudinit, nocloud, yaml, yml | .yaml, .yml | Ubuntu autoinstall, cloud-init |
flatcar, coreos, ignition, ign | .ign, .json | Ignition |
suse, opensuse, autoyast | .autoyast, .xml | AutoYaST |
windows, unattend | .unattend, .xml | Windows unattend.xml |
json | .json, .ign | |
xml | .xml | |
cfg | .cfg | |
ipxe | .ipxe |
A segment naming none of these constrains nothing, which is why /answer keeps
working exactly as it always has.
Two traps in this table
- Filtering is on the extension, not the family.
.ksand.preseedare both text documents; filtering by family would let a preseed answer/rhel/ks. seedis deliberately not an alias.s=http://server/seed/is an ordinary NoCloud seed URL, and it serves YAML. An alias has to be specific enough that nobody reaches it by accident. (The.seedextension still exists, and/debian/serves it.)
Control keys, per format
Stripped before the answer is sent.
| Format | Spelling |
|---|---|
| TOML | top-level extends = "base", members = […], [match] table |
| YAML | top-level extends:, members:, match: |
| JSON | top-level "extends", "members", "match" |
| XML | <answer-meta extends="base"><member>…</member><match k="v" /></answer-meta> |
| Text | # answer: extends <name> · # answer: member a, b · # answer: match k=v k2=v2 |
Text directives also accept // as the comment marker. match takes space-separated
key=pattern pairs; member a comma-separated list. Ordinary comments in a text document
are served — only # answer: lines are removed.
Merge semantics
| Structural formats | Text formats | |
|---|---|---|
| Maps / objects / elements | merge recursively | — |
| Scalars | higher layer replaces | — |
| Arrays / lists | replace, never append | — |
| Whole document | — | concatenated in layer order |
XML pairs siblings by element name plus a discriminating attribute — name, id, key,
alias, pass — and honours config:type="list". Declarations, doctypes, namespaces and
attributes survive a merge; original indentation and comment placement do not.
Validators check can call
| Format | Tool | Invoked as |
|---|---|---|
toml | proxmox-auto-install-assistant | validate-answer <file> |
xml, autoyast, unattend | xmllint | --noout <file> |
ks | ksvalidator | <file> |
| everything else | — | none exists |
A tool that is not on PATH is reported once as a note, never as a failure.