Hostname: Standardpräfix tuxflotte statt des vom Boot-Medium gemeldeten Namens

Ohne eigene Hostnamenkonvention übernahm der Server den vom Client
gemeldeten Namen. Der Client ist das Live-System des Boot-Mediums, also
hieß jedes Gerät "debian" (auch das erste Kundengerät). Jetzt vergibt der
Server immer selbst, ohne eigenen Präfix als tuxflotte-<Nummer>. Bekannte
Geräte mit unpassendem Namen bekommen ihn bei der nächsten Neuinstallation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-13 13:47:59 +02:00
1 parent ea00480df1
commit 381e0e55c1
1 file changed
+17 -11
+17 -11
View File
@@ -44,6 +44,11 @@ AGENT_REPORTABLE_EVENT_TYPES = {"applied", "apply_failed", "removed", "remove_fa
# Name der pro Organisation automatisch angelegten Standard-OE (siehe
# Konfigurationsgruppen-Plan) - Landeplatz fuer neu aktivierte Geraete.
STANDARD_OE_NAME = "Neue Geräte"
# Hostnamen vergibt immer der Server. Organisationen ohne eigenen Präfix
# bekommen diesen (13.10.2026) - vorher galt dann der vom Client gemeldete
# Name, und der Client ist das Live-System des Boot-Mediums: jedes Gerät
# hieß "debian" (auch das erste Kundengerät).
STANDARD_HOSTNAME_PRAEFIX = "tuxflotte"
# Phase 4 des Self-Service-ISO-Plans (siehe tuxflotte-installer/scripts/
# build_customer_iso.sh). TUXFLOTTE_INSTALLER_DIR ist ein separat auf anode
@@ -1634,9 +1639,9 @@ def set_hostname_konvention(organization_id: str, praefix: str | None, stellen:
def generate_hostname_for_organization(cur, organization_id: str) -> str | None:
"""
Erzeugt einen Hostnamen nach der Organisations-Konvention (Design-Runde
10.09.2026, siehe ADR-0028/Roadmap) - None, wenn keine Konvention
konfiguriert ist (hostname_praefix leer), dann bleibt der vom Client
gemeldete Hostname wie bisher maßgeblich (siehe resolve_hostname_for_activation()).
10.09.2026, siehe ADR-0028/Roadmap). Ohne eigenen Präfix der
Organisation gilt STANDARD_HOSTNAME_PRAEFIX. None nur, wenn es die
Organisation nicht gibt.
"sequenziell": liest+erhöht hostname_naechste_sequenz innerhalb
derselben Transaktion wie der Aufrufer (SELECT ... FOR UPDATE sperrt
@@ -1660,10 +1665,11 @@ def generate_hostname_for_organization(cur, organization_id: str) -> str | None:
)
row = cur.fetchone()
if row is None or not row[0]:
if row is None:
return None
praefix, stellen, modus, naechste_sequenz = row
praefix = praefix or STANDARD_HOSTNAME_PRAEFIX
obergrenze = 10 ** stellen
if modus == "zufaellig":
@@ -1698,8 +1704,9 @@ def resolve_hostname_for_activation(organization_id: str, device_fingerprint: st
"""
Ermittelt den für die Aktivierung zu verwendenden Hostnamen.
Neues Gerät: Organisations-Hostnamenkonvention, falls konfiguriert,
sonst der vom Client gemeldete Name.
Neues Gerät: nach der Hostnamenkonvention der Organisation (ohne
eigenen Präfix: STANDARD_HOSTNAME_PRAEFIX). Der vom Client gemeldete
Name ist nur noch Rückfall, wenn die Vergabe nichts liefert.
Bekanntes Gerät (Neuinstallation): Kunden-ISO-Test 02.10.2026 - bisher
galt hier immer der vom Client gemeldete Name. Der Client ist aber das
@@ -1707,8 +1714,9 @@ def resolve_hostname_for_activation(organization_id: str, device_fingerprint: st
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).
der Konvention neu vergeben. Seit 13.10.2026 auch ohne eigenen Präfix
(Standardpräfix): ein Gerät, das noch "debian" heißt, bekommt bei der
nächsten Neuinstallation seinen Namen.
"""
with get_database_connection() as conn:
@@ -1729,9 +1737,7 @@ def resolve_hostname_for_activation(organization_id: str, device_fingerprint: st
return generiert or reported_hostname
gespeichert, praefix, stellen = bestehend
if not praefix:
return gespeichert or reported_hostname
praefix = praefix or STANDARD_HOSTNAME_PRAEFIX
if gespeichert and re.fullmatch(rf"{re.escape(praefix)}-\d{{{stellen}}}", gespeichert):
return gespeichert