Mehrplatten-Heuristik: target_disk_rank in Bereitstellungsvorlagen

Neues Feld installation_directives.partitioning.target_disk_rank (Default
1 = groesste Platte) auf CreateBereitstellungsvorlageRequest/
create_bereitstellungsvorlage() - ersetzt den bisherigen impliziten
Default in backends/mint-image/backend.sh ("erste Platte in
lsblk-Erkennungsreihenfolge", nicht deterministisch bei mehreren internen
Datentraegern). Migration 0026 setzt den neuen Default in der
partitioning-Spalte und zieht bestehende Zeilen nach.

Siehe platform-docs/roadmap/multi-distro-merkmal-workspace-creator.md,
Phase 0 (Mehrplatten-Heuristik), 08.09.2026 mit dem Nutzer entschieden.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LpNs8yZeQkHgMWx6WNT1QH
This commit is contained in:
admin committed 2026-09-08 15:32:58 +02:00
1 parent 7dcbf9fcd4
commit 7ee62407b7
2 files changed
+40 -1

No files matched your search

+15 -1
View File
@@ -188,6 +188,11 @@ class CreateBereitstellungsvorlageRequest(BaseModel):
disk_encryption: bool = False disk_encryption: bool = False
root_filesystem: str = "ext4" root_filesystem: str = "ext4"
secure_boot_required: bool = False secure_boot_required: bool = False
# Rang nach Plattengroesse (1 = groesste Platte) fuer Geraete mit
# mehreren internen Datentraegern - siehe backends/mint-image/backend.sh
# _mint_image_detect_target_disk() und platform-docs/roadmap/
# multi-distro-merkmal-workspace-creator.md, Phase 0 (08.09.2026).
target_disk_rank: int = 1
class CreateEnrollmentSessionRequest(BaseModel): class CreateEnrollmentSessionRequest(BaseModel):
@@ -593,6 +598,7 @@ def create_bereitstellungsvorlage(
disk_encryption: bool, disk_encryption: bool,
root_filesystem: str, root_filesystem: str,
secure_boot_required: bool, secure_boot_required: bool,
target_disk_rank: int = 1,
) -> dict: ) -> dict:
""" """
Bislang gab es dafuer keinen API-/UI-Weg - Bereitstellungsvorlagen kamen Bislang gab es dafuer keinen API-/UI-Weg - Bereitstellungsvorlagen kamen
@@ -605,7 +611,11 @@ def create_bereitstellungsvorlage(
""" """
vorlage_id = uuid4() vorlage_id = uuid4()
partitioning = {"scheme": "single", "root_filesystem": root_filesystem} partitioning = {
"scheme": "single",
"root_filesystem": root_filesystem,
"target_disk_rank": target_disk_rank,
}
with get_database_connection() as conn: with get_database_connection() as conn:
with conn.cursor() as cur: with conn.cursor() as cur:
@@ -3332,6 +3342,9 @@ def create_bereitstellungsvorlage_endpoint(
if not payload.label.strip(): if not payload.label.strip():
return {"success": False, "error": "invalid_request", "message": "label darf nicht leer sein."} return {"success": False, "error": "invalid_request", "message": "label darf nicht leer sein."}
if payload.target_disk_rank < 1:
return {"success": False, "error": "invalid_request", "message": "target_disk_rank muss mindestens 1 sein."}
vorlage = create_bereitstellungsvorlage( vorlage = create_bereitstellungsvorlage(
organization_id, organization_id,
payload.workspace_id, payload.workspace_id,
@@ -3341,6 +3354,7 @@ def create_bereitstellungsvorlage_endpoint(
payload.disk_encryption, payload.disk_encryption,
payload.root_filesystem, payload.root_filesystem,
payload.secure_boot_required, payload.secure_boot_required,
payload.target_disk_rank,
) )
return {"success": True, "bereitstellungsvorlage": vorlage} return {"success": True, "bereitstellungsvorlage": vorlage}
@@ -0,0 +1,25 @@
BEGIN;
-- target_disk_rank in installation_directives.partitioning (JSONB) - Rang
-- nach Plattengroesse fuer Geraete mit mehreren internen Datentraegern
-- (1 = groesste Platte, absteigend sortiert, mit deterministischem
-- Tiebreak per Geraetepfad bei gleich grossen Platten). Ersetzt den
-- bisherigen impliziten Default "immer die erste Platte in
-- lsblk-Erkennungsreihenfolge" in
-- backends/mint-image/backend.sh:_mint_image_detect_target_disk() - jene
-- Reihenfolge war nicht deterministisch (abhaengig von Bus-Typ/Anschluss/
-- Erkennungszufall). Siehe platform-docs/roadmap/
-- multi-distro-merkmal-workspace-creator.md, Phase 0 (Mehrplatten-
-- Heuristik), 08.09.2026 entschieden+umgesetzt.
ALTER TABLE bereitstellungsvorlagen
ALTER COLUMN partitioning SET DEFAULT
'{"scheme": "single", "root_filesystem": "ext4", "target_disk_rank": 1}'::jsonb;
-- Bestehende Zeilen explizit nachziehen statt sich auf den Laufzeit-
-- Fallback "// 1" im Backend zu verlassen - self-documenting statt
-- stillschweigend implizit.
UPDATE bereitstellungsvorlagen
SET partitioning = partitioning || '{"target_disk_rank": 1}'::jsonb
WHERE NOT (partitioning ? 'target_disk_rank');
COMMIT;