Add boot image management with ISO extraction and serving
build-and-push / test (push) Successful in 34s
build-and-push / build-and-push (push) Successful in 1m7s

Upload Proxmox ISOs via API or dashboard UI, extract kernel+initrd
using pure-Go iso9660 library, store on disk, and serve over HTTP
for PXE booting. Dynamic kernel/initrd filenames per image replace
the previous hardcoded paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 21:26:31 -04:00
parent da2d72e95d
commit 4774600040
13 changed files with 486 additions and 20 deletions
+16 -4
View File
@@ -16,6 +16,7 @@ import (
"provisioning/internal/db"
"provisioning/internal/events"
"provisioning/internal/httpserver"
"provisioning/internal/image"
"provisioning/internal/infra"
"provisioning/internal/orchestrator"
"provisioning/internal/pxe"
@@ -45,11 +46,17 @@ func main() {
}
defer database.Close()
if err := os.MkdirAll(cfg.Images.Dir, 0o755); err != nil {
log.Fatalf("create images dir: %v", err)
}
hosts := &store.Hosts{DB: database}
ops := &store.Operations{DB: database}
locks := &store.Locks{DB: database, TTLMinutes: cfg.Locks.TTLMinutes}
images := &store.Images{DB: database}
imageSvc := &image.Service{Store: images, ImageDir: cfg.Images.Dir}
hub := events.NewHub()
runner := &orchestrator.Runner{
@@ -91,6 +98,8 @@ func main() {
ServerTypes: serverTypes,
}
imageAPI := &api.ImageAPI{Svc: imageSvc}
hostAPI := &api.HostAPI{
Hosts: hosts,
Ops: ops,
@@ -117,6 +126,7 @@ func main() {
Ops: ops,
Locks: locks,
Images: images,
ImageSvc: imageSvc,
Runner: runner,
Orchestrator: hostOrch,
Hub: hub,
@@ -126,10 +136,12 @@ func main() {
}
router := httpserver.NewRouter(httpserver.Deps{
HostAPI: hostAPI,
BootAPI: bootAPI,
UI: ui,
Hub: hub,
HostAPI: hostAPI,
BootAPI: bootAPI,
ImageAPI: imageAPI,
UI: ui,
Hub: hub,
ImageDir: cfg.Images.Dir,
})
srv := &http.Server{