provisioning-server/migrations/0015_enrollment_session_activation_und_partitionierung.sql
Thomas Stallinger 896c22c537 feat: Enrollment-Session-Verbrauch, Organisations-PATCH, strukturierte Partitionierung (Phase 3)
/api/v1/activate akzeptiert jetzt zusätzlich Enrollment-Session-Codes
(die Session-id selbst dient als Bearer-Credential, kein neues
code-Feld nötig) neben den bestehenden organisationsweiten
Aktivierungscodes - fällt bei Nicht-UUID sofort auf den klassischen
Pfad zurück, kein Konflikt. Prüft Widerruf/Ablauf/Kontingent, zählt
devices_used bei Erfolg hoch. Ungültige Sessions melden denselben
invalid_activation_code-Fehlschlag wie ein ungültiger klassischer
Code - das bricht den Installer schon beim Server-Handshake ab, lange
vor jeder destruktiven Aktion (siehe ADR-0008), kein zusätzlicher
Mechanismus nötig.

Antwort-templates werden bei Enrollment-Session-Aktivierung auf die
eine zur Session gehörende Vorlage gefiltert und mit is_default=true
markiert - der bereits in tuxflotte-installer Phase 2 gebaute
Auto-Modus (wählt automatisch die als is_default markierte Vorlage)
funktioniert dadurch ohne jede Installer-Änderung korrekt.

organizations: neuer PATCH-Endpoint (nur Name, weitere Felder bewusst
noch offen).

bereitstellungsvorlagen.partitioning: von TEXT auf JSONB umgestellt,
bestehende "default"-Werte auf {"scheme": "single", "root_filesystem":
"ext4"} migriert - das ist der Vertrag, den tuxflotte-installers
backend_generate_config() (Phase 2) bereits erwartet.

Lokal gegen eine Wegwerf-Postgres mit allen Migrationen 0001-0015
verifiziert: Enrollment-Session-Aktivierung (Vorlagen-Filterung,
is_default-Erzwingung, devices_used-Zählung), Kontingent-Erschöpfung,
Widerruf, Ablauf, Rückfall auf klassische Aktivierungscodes
(Regression), PATCH organizations (Erfolg + 404), /resolve liefert
partitioning jetzt korrekt als JSON-Objekt statt String.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 16:56:46 +02:00

25 lines
951 B
PL/PgSQL

BEGIN;
-- installation_directives.partitioning ist jetzt ein strukturiertes Objekt
-- statt eines einfachen Strings (siehe tuxflotte-installer Phase 2,
-- backend_generate_config() erwartet {"scheme": "single"|"custom",
-- "root_filesystem": "ext4"|"btrfs", "extra_partitions": [...]}) -
-- bestehende "default"-Werte werden auf die neue single-scheme-Form
-- abgebildet.
-- Bestehender Textdefault muss vor der Typumstellung weg (kann nicht
-- automatisch nach JSONB gecastet werden).
ALTER TABLE bereitstellungsvorlagen
ALTER COLUMN partitioning DROP DEFAULT;
ALTER TABLE bereitstellungsvorlagen
ALTER COLUMN partitioning TYPE JSONB
USING CASE
WHEN partitioning = 'default' THEN '{"scheme": "single", "root_filesystem": "ext4"}'::jsonb
ELSE to_jsonb(partitioning)
END;
ALTER TABLE bereitstellungsvorlagen
ALTER COLUMN partitioning SET DEFAULT '{"scheme": "single", "root_filesystem": "ext4"}'::jsonb;
COMMIT;