diff options
Diffstat (limited to 'nixpkgs/nixos/modules/services/networking/kea.nix')
-rw-r--r-- | nixpkgs/nixos/modules/services/networking/kea.nix | 114 |
1 files changed, 90 insertions, 24 deletions
diff --git a/nixpkgs/nixos/modules/services/networking/kea.nix b/nixpkgs/nixos/modules/services/networking/kea.nix index 17b4eb2e283b..d674a97391c9 100644 --- a/nixpkgs/nixos/modules/services/networking/kea.nix +++ b/nixpkgs/nixos/modules/services/networking/kea.nix @@ -9,27 +9,33 @@ with lib; let cfg = config.services.kea; + xor = x: y: (!x && y) || (x && !y); format = pkgs.formats.json {}; - ctrlAgentConfig = format.generate "kea-ctrl-agent.conf" { + chooseNotNull = x: y: if x != null then x else y; + + ctrlAgentConfig = chooseNotNull cfg.ctrl-agent.configFile (format.generate "kea-ctrl-agent.conf" { Control-agent = cfg.ctrl-agent.settings; - }; - dhcp4Config = format.generate "kea-dhcp4.conf" { + }); + + dhcp4Config = chooseNotNull cfg.dhcp4.configFile (format.generate "kea-dhcp4.conf" { Dhcp4 = cfg.dhcp4.settings; - }; - dhcp6Config = format.generate "kea-dhcp6.conf" { + }); + + dhcp6Config = chooseNotNull cfg.dhcp6.configFile (format.generate "kea-dhcp6.conf" { Dhcp6 = cfg.dhcp6.settings; - }; - dhcpDdnsConfig = format.generate "kea-dhcp-ddns.conf" { + }); + + dhcpDdnsConfig = chooseNotNull cfg.dhcp-ddns.configFile (format.generate "kea-dhcp-ddns.conf" { DhcpDdns = cfg.dhcp-ddns.settings; - }; + }); package = pkgs.kea; in { options.services.kea = with types; { ctrl-agent = mkOption { - description = '' + description = lib.mdDoc '' Kea Control Agent configuration ''; default = {}; @@ -40,16 +46,27 @@ in extraArgs = mkOption { type = listOf str; default = []; - description = '' + description = lib.mdDoc '' List of additonal arguments to pass to the daemon. ''; }; + configFile = mkOption { + type = nullOr path; + default = null; + description = lib.mdDoc '' + Kea Control Agent configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html>. + + Takes preference over [settings](#opt-services.kea.ctrl-agent.settings). + Most users should prefer using [settings](#opt-services.kea.ctrl-agent.settings) instead. + ''; + }; + settings = mkOption { type = format.type; default = null; - description = '' - Kea Control Agent configuration as an attribute set, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html"/>. + description = lib.mdDoc '' + Kea Control Agent configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/agent.html>. ''; }; }; @@ -57,7 +74,7 @@ in }; dhcp4 = mkOption { - description = '' + description = lib.mdDoc '' DHCP4 Server configuration ''; default = {}; @@ -68,11 +85,22 @@ in extraArgs = mkOption { type = listOf str; default = []; - description = '' + description = lib.mdDoc '' List of additonal arguments to pass to the daemon. ''; }; + configFile = mkOption { + type = nullOr path; + default = null; + description = lib.mdDoc '' + Kea DHCP4 configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html>. + + Takes preference over [settings](#opt-services.kea.dhcp4.settings). + Most users should prefer using [settings](#opt-services.kea.dhcp4.settings) instead. + ''; + }; + settings = mkOption { type = format.type; default = null; @@ -97,8 +125,8 @@ in } ]; } ]; }; - description = '' - Kea DHCP4 configuration as an attribute set, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html"/>. + description = lib.mdDoc '' + Kea DHCP4 configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp4-srv.html>. ''; }; }; @@ -106,7 +134,7 @@ in }; dhcp6 = mkOption { - description = '' + description = lib.mdDoc '' DHCP6 Server configuration ''; default = {}; @@ -117,11 +145,22 @@ in extraArgs = mkOption { type = listOf str; default = []; - description = '' + description = lib.mdDoc '' List of additonal arguments to pass to the daemon. ''; }; + configFile = mkOption { + type = nullOr path; + default = null; + description = lib.mdDoc '' + Kea DHCP6 configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html>. + + Takes preference over [settings](#opt-services.kea.dhcp6.settings). + Most users should prefer using [settings](#opt-services.kea.dhcp6.settings) instead. + ''; + }; + settings = mkOption { type = format.type; default = null; @@ -147,8 +186,8 @@ in } ]; } ]; }; - description = '' - Kea DHCP6 configuration as an attribute set, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html"/>. + description = lib.mdDoc '' + Kea DHCP6 configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/dhcp6-srv.html>. ''; }; }; @@ -156,7 +195,7 @@ in }; dhcp-ddns = mkOption { - description = '' + description = lib.mdDoc '' Kea DHCP-DDNS configuration ''; default = {}; @@ -167,11 +206,22 @@ in extraArgs = mkOption { type = listOf str; default = []; - description = '' + description = lib.mdDoc '' List of additonal arguments to pass to the daemon. ''; }; + configFile = mkOption { + type = nullOr path; + default = null; + description = lib.mdDoc '' + Kea DHCP-DDNS configuration as a path, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html>. + + Takes preference over [settings](#opt-services.kea.dhcp-ddns.settings). + Most users should prefer using [settings](#opt-services.kea.dhcp-ddns.settings) instead. + ''; + }; + settings = mkOption { type = format.type; default = null; @@ -189,8 +239,8 @@ in ddns-domains = [ ]; }; }; - description = '' - Kea DHCP-DDNS configuration as an attribute set, see <link xlink:href="https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html"/>. + description = lib.mdDoc '' + Kea DHCP-DDNS configuration as an attribute set, see <https://kea.readthedocs.io/en/kea-${package.version}/arm/ddns.html>. ''; }; }; @@ -214,6 +264,10 @@ in } (mkIf cfg.ctrl-agent.enable { + assertions = [{ + assertion = xor (cfg.ctrl-agent.settings == null) (cfg.ctrl-agent.configFile == null); + message = "Either services.kea.ctrl-agent.settings or services.kea.ctrl-agent.configFile must be set to a non-null value."; + }]; environment.etc."kea/ctrl-agent.conf".source = ctrlAgentConfig; @@ -252,6 +306,10 @@ in }) (mkIf cfg.dhcp4.enable { + assertions = [{ + assertion = xor (cfg.dhcp4.settings == null) (cfg.dhcp4.configFile == null); + message = "Either services.kea.dhcp4.settings or services.kea.dhcp4.configFile must be set to a non-null value."; + }]; environment.etc."kea/dhcp4-server.conf".source = dhcp4Config; @@ -295,6 +353,10 @@ in }) (mkIf cfg.dhcp6.enable { + assertions = [{ + assertion = xor (cfg.dhcp6.settings == null) (cfg.dhcp6.configFile == null); + message = "Either services.kea.dhcp6.settings or services.kea.dhcp6.configFile must be set to a non-null value."; + }]; environment.etc."kea/dhcp6-server.conf".source = dhcp6Config; @@ -336,6 +398,10 @@ in }) (mkIf cfg.dhcp-ddns.enable { + assertions = [{ + assertion = xor (cfg.dhcp-ddns.settings == null) (cfg.dhcp-ddns.configFile == null); + message = "Either services.kea.dhcp-ddns.settings or services.kea.dhcp-ddns.configFile must be set to a non-null value."; + }]; environment.etc."kea/dhcp-ddns.conf".source = dhcpDdnsConfig; |