Commit Graph

3 Commits

Author SHA1 Message Date
unkinben c66eaedbd8 Add image-based provisioning (liveimg) + shared storage partial
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
Adds a fast, reproducible install path that unpacks a prebuilt AlmaLinux 9 node
rootfs onto the disk instead of resolving packages, with per-host networking
still templated after the unpack. Storage reuses the OptiPlex model vars so
image and package installs lay disks out identically.

- kickstart/image.ks.tmpl: liveimg --url={{ .DistroVars.rootfs_tarball }};
  %post renders per-host NetworkManager keyfiles from NetBox interface data
  (the image is generic and liveimg clobbers /etc), sets hostname, the
  puppet-initial PUPPETCA_URL env, and the provisioned callback.
- kickstart/_storage.ks.tmpl: shared storage-block/storage-pre partials
  (storage_mode / vg_grow); almalinux9.ks.tmpl now uses them too (no behaviour
  change) so both installs share one storage layout.
- catalog/almalinux9-image.yaml (generic autopart) + optiplex-7080-image.yaml
  (auto-nvme + vg_grow) point liveimg at the artifactapi rootfs-images repo.
- .woodpecker/build-image.yaml: builds the rootfs via dnf --installroot,
  tars almalinux9-node-<ver>.tar.zst, uploads to the rootfs-images local repo
  on tag node-image-<ver>.

Validated with bootapi validate + shellcheck; no bootapi code change (DistroVars
+ existing interface data suffice).

Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
2026-07-29 21:45:17 +10:00
unkinben 80dbcdd108 Add per-model OptiPlex kickstart variants from live Cobbler
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
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
unkinben 24fd6b3ffa Seed bootapi templates + distro catalog
ci/woodpecker/pr/validate Pipeline failed
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/push/pre-commit Pipeline was successful
ci/woodpecker/push/validate Pipeline failed
Initial content for bootapi's git-synced template set: the kickstart and iPXE
templates and the distro catalog (almalinux9, fedora) ported from bootapi's
embedded defaults, plus CI that validates every template/catalog renders for
every distro (bootapi validate) and shellchecks the %post blocks.

Claude-Session: https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv
2026-07-28 23:10:35 +10:00