- configgen: input model shared by derivation and renderers - derive: forward zones per domain, reverse zones (IPv4 octet, IPv6 nibble boundaries), A/AAAA/PTR from static and manual_dhcp entries, Kea subnets with effective pools and reservations; pure and deterministic - bindgen: zone-statement include, options include, zone files with strict validation, canonical ordering and RFC 1035 TXT escaping - keagen: typed Kea DHCPv4 JSON with strict validation - golden-file, validation, determinism and fuzz tests - integration tests check generated files with real named-checkconf, named-checkzone (BIND 9.18, 9.20) and kea-dhcp4 -t (Kea 2.6, 3.2); new CI job Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
0014 – Konfigurationserzeugung: rein, typisiert, Golden-Files
- Status: Akzeptiert
- Datum: 2026-10-12
Entscheidung
- Der Generator ist eine Sammlung reiner Funktionen:
Render(input) → (artefakte, error). Kein Datenbank-, Zeit- oder Zufallszugriff im Generator. Alles, was variieren könnte (Zeitstempel, Seriennummer, Schlüssel), steht im Eingabeobjekt. - Ausgaben sind deterministisch: Maps werden sortiert, Reihenfolgen sind fest definiert.
- Typisierte Zwischenmodelle statt Text-Templates:
- Kea: Go-Structs, serialisiert mit
encoding/json. Nutzereingaben können damit die JSON-Struktur nicht verlassen. - BIND: eigener kleiner Writer für
named.conf-Blöcke und Zonendateien. Jeder Wert läuft durch typisierte Validierer (Label nach RFC 1035/1123, FQDN, TTL, IP, CIDR, MAC). TXT-Inhalte werden in Character-Strings ≤ 255 Byte aufgeteilt und escaped. Strings, die Steuerzeichen enthalten, werden abgelehnt. - Kein
text/templateund keine String-Verkettung mit Nutzereingaben.
- Kea: Go-Structs, serialisiert mit
- SOA-Seriennummer = Revisionsnummer des Clusters (streng monoton, 32 Bit). Bei Übernahme bestehender Zonen mit höherer Seriennummer wird ein Offset gespeichert.
- Tests: Golden-Files unter
testdata/(Aktualisierung mitgo test ./... -update), Fuzz-Tests für die Validierer und in den Integrationstests (/test) die Prüfung jeder erzeugten Konfiguration mit echtemnamed-checkconf/named-checkzoneundkea-dhcp4 -tin Containern.
Nachträge
- 2026-10-13 (M2): Aufteilung in die Pakete
configgen(Eingabemodell),configgen/derive(Ableitung aus IPAM),configgen/bindgenundconfiggen/keagen(Renderer). TXT-Inhalte mit Bytes außerhalb von 0x20–0x7E werden nicht abgelehnt, sondern als\DDDescaped (RFC 1035 §5.1); Namen mit Steuerzeichen bleiben verboten. Die Anfangsdatei dynamischer Zonen darf Records enthalten (z. B. vorbereitete SRV-Einträge); danach gehört sie BIND. Die Integrationstests liegen unterserver/internal/configgen/integration(Build-Tagintegration), weil Go-internal-Pakete aus/testnicht importierbar sind.
Konsequenzen
Gleicher Datenbankstand ergibt byte-gleiche Konfiguration. Diffs zwischen Revisionen sind deshalb aussagekräftig.