unkinben 80dbcdd108
ci/woodpecker/push/pre-commit Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/push/validate Pipeline was successful
ci/woodpecker/pr/validate Pipeline was successful
Add per-model OptiPlex kickstart variants from live Cobbler
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
2026-07-29 00:48:15 +10:00

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)

  • validatebootapi 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>. Plus shellcheck (error severity) of the %post blocks.
  • 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.

S
Description
Live kickstart/iPXE templates + distro catalog for bootapi. Pulled by bootapi via git-sync; CI validates templates render for every distro.
Readme 77 KiB
Languages
Go Template 93.1%
Shell 6.9%