DHCP: Backend auf Kea umgestellt, eigene Options (global + pro Client), echte Install-/Dienststeuerung
- Backend-Wechsel von isc-dhcp-server (seit 2022 EOL) auf Kea DHCP (kea-dhcp4-server) — aktiv weiterentwickelt, bildet "globaler Wert, pro Client überschreibbar" nativ über Kea-Reservation-Option-Data ab. - Neue Tabellen dhcp_option_defs/dhcp_option_values: eigene/herstellerspezifische Options mit Code/Name/Typ/Beschreibung, Wert global sowie optional pro Client (device_mac="" für global, siehe Kommentar zur SQLite-NULL- UNIQUE-Falle). UI dafür: Optionen-Tabelle + "Neue Option"-Modal + Pro-Client-Overrides-Modal je Reservierung. - Kea-JSON-Generator (_render_kea_config): option-def für jede eigene Option, globale Werte im Top-Level option-data, Client-Overrides im option-data der jeweiligen Reservierung. - Reservierungen werden jetzt zusätzlich auf Zugehörigkeit zum konfigurierten Subnet gefiltert (_dhcp_reservation_candidates) — beim Live-Test gegen echtes Kea gefunden: Kea lehnt Reservierungen außerhalb ihres Subnets als Konfigurationsfehler ab, das muss also schon bei der Generierung berücksichtigt werden statt erst beim Laden zu crashen. - Neue, einzeln bestätigte Aktionen: "kea-dhcp4-server installieren" (apt-get), "Aktivieren & (neu) starten" sowie "Stoppen" (systemctl) — bewusst getrennt von "Konfiguration speichern"/"In Datei schreiben". - Live gegen eine echte, frisch installierte Kea-3.0.3-Instanz verifiziert: Installation erfolgreich, generierte Config besteht "kea-dhcp4 -t", Dienst übernimmt sie beim Neustart fehlerfrei (DHCP4_CONFIG_COMPLETE), globaler Options-Wert und Client-Override erscheinen korrekt getrennt. Danach wieder gestoppt; Paket bleibt installiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -104,6 +104,35 @@ CREATE TABLE IF NOT EXISTS settings (
|
||||
);
|
||||
""")
|
||||
|
||||
# DHCP: eigene Options-Definitionen (analog "Vordefinierte Optionen und
|
||||
# Werte" bei einem Windows-DHCP-Server) — Code/Name/Typ/Beschreibung.
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS dhcp_option_defs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
code INTEGER NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
type TEXT NOT NULL,
|
||||
description TEXT
|
||||
);
|
||||
""")
|
||||
|
||||
# DHCP: Werte je Option — device_mac='' bedeutet global (gilt für den
|
||||
# ganzen Scope), ein gesetzter device_mac überschreibt den globalen Wert
|
||||
# für genau dieses Gerät. Bewusst '' statt NULL für den globalen Fall,
|
||||
# da SQLite NULL in UNIQUE-Constraints nicht als gleich behandelt (zwei
|
||||
# NULL-Zeilen wären sonst kein Konflikt) — mit '' funktioniert ON CONFLICT
|
||||
# zuverlässig für den Upsert des globalen Werts.
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS dhcp_option_values (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
option_def_id INTEGER NOT NULL,
|
||||
device_mac TEXT NOT NULL DEFAULT '',
|
||||
value TEXT NOT NULL,
|
||||
FOREIGN KEY (option_def_id) REFERENCES dhcp_option_defs(id),
|
||||
UNIQUE (option_def_id, device_mac)
|
||||
);
|
||||
""")
|
||||
|
||||
# Änderungslog (Audit-Log) — wer hat wann was geändert. Bewusst OHNE
|
||||
# PoE-Neustarts (die stehen im Live-Log von poe.sh).
|
||||
c.execute("""
|
||||
|
||||
Reference in New Issue
Block a user