80dbcdd1080a91bc6995424620b849739fcb0a55
The seed almalinux9 kickstart reconstructed the Cobbler contract from memory and guessed storage: it installed to sda with autopart and keyboard us. The real Cobbler server (cobbler.main.unkin.net) provisions the OptiPlex fleet from three model-specific profiles (almalinux9-dell_3050 / _3060 / _7080) that all install to NVMe with an explicit LVM layout and differ in disk selection, EFI handling and whether the VG grows. This folds that real content in, keeping one shared template driven by per-model catalog data. Changes: - Make almalinux9.ks.tmpl storage model-aware via .DistroVars.storage_mode: fixed-nvme (static nvme0n1, BIOS/MBR), auto-nvme (%pre picks the internal NVMe, UEFI-aware, --boot-drive), with vg_grow to grow the PV; generic/VM hosts keep the autopart-on-sda path. - Port the explicit LVM layout (/boot, root, swap, /home, /var/log) and the %pre NVMe picker + rootvg wipe from the real Cobbler dell templates. - Add catalog entries optiplex-3050 (fixed-nvme), optiplex-3060 (auto-nvme) and optiplex-7080 (auto-nvme + vg_grow), selected by a device's provision_template custom field set to the OptiPlex device_type slug. - Correct keyboard us -> au and add the kdump addon + kexec-tools/bind-utils to match the Cobbler profiles. - Document the per-model variants and selection in catalog/README.md. Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
bootapi-templates
Live kickstart / iPXE templates and the distro catalog for bootapi. bootapi git-syncs this repo (every ~3 minutes, like argocd) and hot-swaps its template set on change, so OS and template updates ship by merging here — no bootapi rebuild or redeploy. If this repo is unreachable, bootapi falls back to its embedded copy of these files.
Layout
kickstart/<name>.ks.tmpl # kickstart templates (Go text/template)
ipxe/<name>.ipxe.tmpl # iPXE scripts: boot, fallback-local, fallback-shell
catalog/<name>.yaml # distro catalog: host -> boot images + kickstart
catalog/README.md # catalog field reference + debian/talos path
ci/shellcheck-post.sh # %post shellcheck helper (used by CI)
The data model available to templates and the catalog field reference live in the bootapi docs: data-model, template-authoring, and catalog/README.md here.
CI (required before merge)
- validate —
bootapi validate .renders every kickstart + iPXE script for every catalog distro against a fixture host and fails on any parse/resolve error or unresolved<no value>. Plusshellcheck(error severity) of the%postblocks. - pre-commit — yamllint + whitespace/EOF checks.
Validate locally before pushing:
go run git.unkin.net/unkin/bootapi/cmd/bootapi@main validate .
bash ci/shellcheck-post.sh # needs shellcheck
Adding a distro
Add catalog/<name>.yaml + kickstart/<name>.ks.tmpl (and, if the OS needs a
mirror bootapi can't reach, a terraform-artifactapi remote). See
catalog/README.md — including the debian/talos path.
Description
Live kickstart/iPXE templates + distro catalog for bootapi. Pulled by bootapi via git-sync; CI validates templates render for every distro.
Languages
Go Template
93.1%
Shell
6.9%