Hostnamenkonvention auch bei Neuinstallation bekannter Geraete, Live-System-Name nicht mehr uebernehmen (Kunden-ISO-Test R16)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-03 10:24:42 +02:00
1 parent 4d5d6090b4
commit 43d0fce764
1 file changed
+35 -11
+35 -11
View File
@@ -1477,24 +1477,48 @@ def generate_hostname_for_organization(cur, organization_id: str) -> str | None:
def resolve_hostname_for_activation(organization_id: str, device_fingerprint: str, reported_hostname: str | None) -> str | None:
"""
Ermittelt den für die Aktivierung zu verwendenden Hostnamen: bei einem
bereits bekannten Gerät bleibt IMMER der vom Client gemeldete
maßgeblich (unverändertes Verhalten, siehe load_or_create_device() -
kein Überschreiben eines evtl. manuell umbenannten Bestandsgeräts bei
jeder Re-Aktivierung). Nur bei einem GENUIN NEUEN Gerät greift die
Organisations-Hostnamenkonvention, falls konfiguriert.
Ermittelt den für die Aktivierung zu verwendenden Hostnamen.
Neues Gerät: Organisations-Hostnamenkonvention, falls konfiguriert,
sonst der vom Client gemeldete Name.
Bekanntes Gerät (Neuinstallation): Kunden-ISO-Test 02.10.2026 - bisher
galt hier immer der vom Client gemeldete Name. Der Client ist aber das
Live-System des Boot-Mediums und meldet dessen Hostnamen ("debian"),
nicht den des installierten Geräts - jede Neuinstallation benannte das
Gerät deshalb in "debian" um und die Konvention griff nie. Jetzt:
passt der gespeicherte Name zur Konvention, bleibt er; sonst wird nach
der Konvention neu vergeben. Ohne Konvention bleibt der gespeicherte
Name (auch ein manuell vergebener).
"""
with get_database_connection() as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1 FROM devices WHERE device_fingerprint = %s", (device_fingerprint,))
ist_neues_geraet = cur.fetchone() is None
cur.execute(
"""
SELECT d.hostname, o.hostname_praefix, o.hostname_stellen
FROM devices d
JOIN organizations o ON o.id = %s
WHERE d.device_fingerprint = %s
""",
(organization_id, device_fingerprint),
)
bestehend = cur.fetchone()
if not ist_neues_geraet:
return reported_hostname
if bestehend is None:
generiert = generate_hostname_for_organization(cur, organization_id)
return generiert or reported_hostname
gespeichert, praefix, stellen = bestehend
if not praefix:
return gespeichert or reported_hostname
if gespeichert and re.fullmatch(rf"{re.escape(praefix)}-\d{{{stellen}}}", gespeichert):
return gespeichert
generiert = generate_hostname_for_organization(cur, organization_id)
return generiert or reported_hostname
return generiert or gespeichert or reported_hostname
def fetch_organisationseinheiten(organization_id: str):
"""