Aktivierung: bei Medium mit Ziel-OE deren Workspace in der Template-Antwort

Die Installer-Uebersicht (25_installation_confirm.sh) zeigte den
Profil-Workspace, wirksam ist aber der der Ziel-OE (Schritt F). Neue
Hilfsfunktion oe_kette_workspace(); gleiche Distro-Regel wie
geraete_basis_herkunft(). Der Installer liest nur den Namen, keine
Installer-Aenderung noetig. GUI-Runde 10/2026 Punkt 8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-09 11:42:12 +02:00
1 parent 465910f700
commit 61aa108666
1 file changed
+43
+43
View File
@@ -1439,6 +1439,34 @@ def geraete_basis_herkunft(cur, device_id: str):
{"art": "installation"},
)
def oe_kette_workspace(cur, oe_id: str):
"""Nächstgelegener Workspace in der OE-Kette (eigene OE, dann Eltern) als
(workspace_id, name, backend_id) oder None - dieselbe Reihenfolge wie
geraete_basis_herkunft()."""
cur.execute("SELECT organization_id FROM organisationseinheiten WHERE id = %s", (oe_id,))
row = cur.fetchone()
if row is None:
return None
cur.execute(
"""
SELECT oe.id, oe.parent_id, w.id, w.name, w.backend_id
FROM organisationseinheiten oe
LEFT JOIN workspaces w ON w.id = oe.workspace_id
WHERE oe.organization_id = %s
""",
(row[0],),
)
oes = {r[0]: r[1:] for r in cur.fetchall()}
aktuell = UUID(str(oe_id))
while aktuell is not None and aktuell in oes:
parent_id, workspace_id, name, backend_id = oes[aktuell]
if workspace_id is not None:
return str(workspace_id), name, str(backend_id) if backend_id else None
aktuell = parent_id
return None
def fetch_auftragskatalog_state(device_id: str):
"""
Voller Soll-Zustand (present/absent) aller katalogfähigen Merkmale für
@@ -5177,6 +5205,21 @@ def activate(payload: ActivationRequest, request: Request):
for template in fetch_templates(organization_id)
if template["id"] == enrollment_session["bereitstellungsvorlage_id"]
]
# GUI-Runde 09.10.2026 (Punkt 8): Bei einem Medium mit Ziel-OE gilt
# deren Workspace (Schritt F) - die Installer-Übersicht ("Workspace:
# ...", 25_installation_confirm.sh) zeigte bisher den des Profils.
# Gleiche Distro-Regel wie geraete_basis_herkunft(): passt die Distro
# nicht, bleibt es beim Workspace aus der Installation.
if enrollment_session.get("ziel_oe_id") and templates:
with get_database_connection() as conn:
with conn.cursor() as cur:
oe_ws = oe_kette_workspace(cur, enrollment_session["ziel_oe_id"])
if oe_ws and (oe_ws[2] is None or oe_ws[2] == templates[0]["backend"]["id"]):
templates[0] = {
**templates[0],
"workspace": {"id": oe_ws[0], "name": oe_ws[1]},
"workspace_herkunft": "ziel_oe",
}
else:
templates = fetch_templates(organization_id)