Neue iso_builds-Tabelle (Migration 0016) + vier Endpunkte, die
tuxflotte-installer/scripts/build_customer_iso.sh als Hintergrund-Thread
anstossen: POST/GET .../iso-builds (Trigger + Liste), GET
/api/v1/iso-builds/{id} (Status-Poll) und .../download (fertige ISO
ausliefern). Aeltere abgeschlossene Builds derselben Organisation werden
nach einem erfolgreichen neuen Build automatisch aufgeraeumt (Datei +
DB-Zeile) - anodes Root-Dateisystem ist mit 28GB knapp bemessen.
WLAN-Zugangsdaten werden bewusst nicht in iso_builds gespeichert, nur
transient an build_customer_iso.sh durchgereicht.
Lokal end-to-end gegen einen Wegwerf-Postgres-Container verifiziert (alle
Migrationen 0001-0016, echter build_customer_iso.sh-Lauf gegen die
gecachte Mint-ISO, Status-Uebergaenge pending->running->completed,
Download-Endpunkt liefert byte-identische Datei, Cleanup-Logik entfernt
den vorherigen Build einer Organisation nach dem naechsten erfolgreichen
Bau). Testorganisation danach wieder geloescht.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
28 lines
1.1 KiB
PL/PgSQL
28 lines
1.1 KiB
PL/PgSQL
BEGIN;
|
|
|
|
-- Phase 4 des Self-Service-ISO-Plans: Bautracking fuer personalisierte
|
|
-- Kunden-ISOs (siehe tuxflotte-installer/scripts/build_customer_iso.sh).
|
|
-- Der Bau selbst laeuft als Hintergrund-Thread im provisioning-server
|
|
-- (siehe run_iso_build() in app.py) - diese Tabelle ist der Status-
|
|
-- Speicher dafuer, den der Trigger-/Status-/Download-Endpoint gemeinsam
|
|
-- nutzen. WLAN-Zugangsdaten werden bewusst NICHT hier gespeichert (nur
|
|
-- transient waehrend des Baus verwendet, siehe app.py) - persistente,
|
|
-- verschluesselte Ablage ist Sache der Kundenplattform (Phase 5).
|
|
CREATE TABLE iso_builds (
|
|
id UUID PRIMARY KEY,
|
|
organization_id UUID NOT NULL
|
|
REFERENCES organizations(id)
|
|
ON DELETE CASCADE,
|
|
status TEXT NOT NULL DEFAULT 'pending'
|
|
CHECK (status IN ('pending', 'running', 'completed', 'failed')),
|
|
output_filename TEXT,
|
|
error_message TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
started_at TIMESTAMPTZ,
|
|
finished_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX iso_builds_organization_id_idx ON iso_builds (organization_id);
|
|
|
|
COMMIT;
|