feat: try rework

This commit is contained in:
Katharina Heidenreich 2026-04-04 11:42:19 +02:00
parent 1ddbd3b8b6
commit ecf10628c3
51 changed files with 1941 additions and 445 deletions

40
intermediate/dhcp.nix Normal file
View file

@ -0,0 +1,40 @@
let
lib = import <nixpkgs/lib>;
net = import ../config/network.nix;
networkDevicesValidation = import ../validation/network_devices.nix;
devices = networkDevicesValidation.getDevices net;
localDevices = networkDevicesValidation.getLocalDevices devices;
reservationRecords = lib.concatLists (lib.mapAttrsToList (deviceName: device:
if device ? reservation then
let
reservation = networkDevicesValidation.validateReservationShape deviceName device.reservation;
in
[
{
ip-address = device.ip;
hw-address = reservation.hw_address;
hostname = reservation.hostname;
}
]
else
[]
) localDevices);
ensureUnique = fieldName: values:
let
uniqueValues = lib.unique values;
in
if builtins.length uniqueValues != builtins.length values then
throw "Duplicate DHCP reservation ${fieldName} found."
else
null;
_uniqueIps = ensureUnique "ip-address" (map (reservation: reservation.ip-address) reservationRecords);
_uniqueHwAddresses = ensureUnique "hw-address" (map (reservation: reservation.hw-address) reservationRecords);
_uniqueHostnames = ensureUnique "hostname" (map (reservation: reservation.hostname) reservationRecords);
in
rec {
reservations = reservationRecords;
}