From 1d207e0fd288d77ba88fe4384ed0bf45dbcf9c74 Mon Sep 17 00:00:00 2001 From: oddlama Date: Mon, 1 Apr 2024 15:15:31 +0200 Subject: [PATCH] feat(topology): add kea network extractor --- topology/nixos/extractors/kea.nix | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 topology/nixos/extractors/kea.nix diff --git a/topology/nixos/extractors/kea.nix b/topology/nixos/extractors/kea.nix new file mode 100644 index 0000000..9c70ac8 --- /dev/null +++ b/topology/nixos/extractors/kea.nix @@ -0,0 +1,34 @@ +{ + config, + lib, + ... +}: let + inherit + (lib) + const + filter + genAttrs + hasInfix + mkEnableOption + mkIf + ; +in { + options.topology.extractors.kea.enable = mkEnableOption "topology kea extractor" // {default = true;}; + + config = let + interfaces = filter (x: !hasInfix "*" x) config.services.kea.dhcp4.settings.interfaces-config.interfaces or []; + headOrNull = xs: + if xs == [] + then null + else builtins.head xs; + subnet = headOrNull (map (x: x.subnet) (config.services.kea.dhcp4.settings.subnet4 or [])); + netName = "${config.topology.self.id}-kea"; + in + mkIf (config.topology.extractors.kea.enable && config.services.kea.dhcp4.enable && interfaces != [] && subnet != null) { + topology.networks.${netName} = { + cidrv4 = subnet; + }; + + topology.self.interfaces = genAttrs interfaces (const {network = netName;}); + }; +}