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:
1 parent
ea00480df1
commit
381e0e55c1
1 file changed
+17
-11
@@ -44,6 +44,11 @@ AGENT_REPORTABLE_EVENT_TYPES = {"applied", "apply_failed", "removed", "remove_fa
|
|||||||
# Name der pro Organisation automatisch angelegten Standard-OE (siehe
|
# Name der pro Organisation automatisch angelegten Standard-OE (siehe
|
||||||
# Konfigurationsgruppen-Plan) - Landeplatz fuer neu aktivierte Geraete.
|
# Konfigurationsgruppen-Plan) - Landeplatz fuer neu aktivierte Geraete.
|
||||||
STANDARD_OE_NAME = "Neue Geräte"
|
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/
|
# Phase 4 des Self-Service-ISO-Plans (siehe tuxflotte-installer/scripts/
|
||||||
# build_customer_iso.sh). TUXFLOTTE_INSTALLER_DIR ist ein separat auf anode
|
# 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:
|
def generate_hostname_for_organization(cur, organization_id: str) -> str | None:
|
||||||
"""
|
"""
|
||||||
Erzeugt einen Hostnamen nach der Organisations-Konvention (Design-Runde
|
Erzeugt einen Hostnamen nach der Organisations-Konvention (Design-Runde
|
||||||
10.09.2026, siehe ADR-0028/Roadmap) - None, wenn keine Konvention
|
10.09.2026, siehe ADR-0028/Roadmap). Ohne eigenen Präfix der
|
||||||
konfiguriert ist (hostname_praefix leer), dann bleibt der vom Client
|
Organisation gilt STANDARD_HOSTNAME_PRAEFIX. None nur, wenn es die
|
||||||
gemeldete Hostname wie bisher maßgeblich (siehe resolve_hostname_for_activation()).
|
Organisation nicht gibt.
|
||||||
|
|
||||||
"sequenziell": liest+erhöht hostname_naechste_sequenz innerhalb
|
"sequenziell": liest+erhöht hostname_naechste_sequenz innerhalb
|
||||||
derselben Transaktion wie der Aufrufer (SELECT ... FOR UPDATE sperrt
|
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()
|
row = cur.fetchone()
|
||||||
|
|
||||||
if row is None or not row[0]:
|
if row is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
praefix, stellen, modus, naechste_sequenz = row
|
praefix, stellen, modus, naechste_sequenz = row
|
||||||
|
praefix = praefix or STANDARD_HOSTNAME_PRAEFIX
|
||||||
obergrenze = 10 ** stellen
|
obergrenze = 10 ** stellen
|
||||||
|
|
||||||
if modus == "zufaellig":
|
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.
|
Ermittelt den für die Aktivierung zu verwendenden Hostnamen.
|
||||||
|
|
||||||
Neues Gerät: Organisations-Hostnamenkonvention, falls konfiguriert,
|
Neues Gerät: nach der Hostnamenkonvention der Organisation (ohne
|
||||||
sonst der vom Client gemeldete Name.
|
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
|
Bekanntes Gerät (Neuinstallation): Kunden-ISO-Test 02.10.2026 - bisher
|
||||||
galt hier immer der vom Client gemeldete Name. Der Client ist aber das
|
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
|
nicht den des installierten Geräts - jede Neuinstallation benannte das
|
||||||
Gerät deshalb in "debian" um und die Konvention griff nie. Jetzt:
|
Gerät deshalb in "debian" um und die Konvention griff nie. Jetzt:
|
||||||
passt der gespeicherte Name zur Konvention, bleibt er; sonst wird nach
|
passt der gespeicherte Name zur Konvention, bleibt er; sonst wird nach
|
||||||
der Konvention neu vergeben. Ohne Konvention bleibt der gespeicherte
|
der Konvention neu vergeben. Seit 13.10.2026 auch ohne eigenen Präfix
|
||||||
Name (auch ein manuell vergebener).
|
(Standardpräfix): ein Gerät, das noch "debian" heißt, bekommt bei der
|
||||||
|
nächsten Neuinstallation seinen Namen.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
with get_database_connection() as conn:
|
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
|
return generiert or reported_hostname
|
||||||
|
|
||||||
gespeichert, praefix, stellen = bestehend
|
gespeichert, praefix, stellen = bestehend
|
||||||
|
praefix = praefix or STANDARD_HOSTNAME_PRAEFIX
|
||||||
if not praefix:
|
|
||||||
return gespeichert or reported_hostname
|
|
||||||
|
|
||||||
if gespeichert and re.fullmatch(rf"{re.escape(praefix)}-\d{{{stellen}}}", gespeichert):
|
if gespeichert and re.fullmatch(rf"{re.escape(praefix)}-\d{{{stellen}}}", gespeichert):
|
||||||
return gespeichert
|
return gespeichert
|
||||||
|
|||||||
Reference in new issue
Block a user