diff --git a/lib/fudo/dns.nix b/lib/fudo/dns.nix index d404ce2..60e819c 100644 --- a/lib/fudo/dns.nix +++ b/lib/fudo/dns.nix @@ -21,9 +21,9 @@ let default = null; }; - network-definition = mkOption { - type = submodule (import ../types/network-definition.nix); - description = "Definition of network to be served by local server."; + zone-definition = mkOption { + type = submodule (import ../types/zone-definition.nix); + description = "Definition of network zone to be served by local server."; }; default-host = mkOption { @@ -139,7 +139,7 @@ in { interfaces = cfg.listen-ips; stateDir = cfg.state-directory; zones = mapAttrs' (dom: dom-cfg: let - net-cfg = dom-cfg.network-definition; + net-cfg = dom-cfg.zone-definition; in nameValuePair "${dom}." { dnssec = dom-cfg.dnssec; diff --git a/lib/fudo/domains.nix b/lib/fudo/domains.nix index 56a0425..c7433f1 100644 --- a/lib/fudo/domains.nix +++ b/lib/fudo/domains.nix @@ -77,6 +77,12 @@ let description = "Hostname of the primary mail server for this domain."; default = null; }; + + zone = mkOption { + type = nullOr str; + description = "Name of the DNS zone associated with domain."; + default = null; + }; }; }; diff --git a/lib/fudo/initrd-network.nix b/lib/fudo/initrd-network.nix index a3c8c35..bf67cf6 100644 --- a/lib/fudo/initrd-network.nix +++ b/lib/fudo/initrd-network.nix @@ -66,13 +66,11 @@ in { (hostname: hostOpts: hostOpts.initrd-network != null) config.instance.local-hosts; in { - network-definition.hosts = mapAttrs' - (hostname: hostOpts: nameValuePair "${hostname}-recovery" - { - ipv4-address = hostOpts.initrd-network.ip; - description = "${hostname} initrd host"; - }) - initrd-network-hosts; + zone-definition.hosts = mapAttrs' + (hostname: hostOpts: nameValuePair "${hostname}-recovery" { + ipv4-address = hostOpts.initrd-network.ip; + description = "${hostname} initrd host"; + }) initrd-network-hosts; extra-records = let recs = (mapAttrsToList diff --git a/lib/fudo/local-network.nix b/lib/fudo/local-network.nix index cbb7f44..3f89db5 100644 --- a/lib/fudo/local-network.nix +++ b/lib/fudo/local-network.nix @@ -74,11 +74,11 @@ in { default = [ ]; }; - network-definition = let - networkOpts = import ../types/network-definition.nix { inherit lib; }; + zone-definition = let + zoneOpts = import ../types/zone-definition.nix { inherit lib; }; in mkOption { - type = submodule networkOpts; - description = "Definition of network to be served by local server."; + type = submodule zoneOpts; + description = "Definition of network zone to be served by local server."; default = { }; }; @@ -94,12 +94,13 @@ in { fudo.system.hostfile-entries = let other-hosts = filterAttrs (hostname: hostOpts: hostname != config.instance.hostname) - cfg.network-definition.hosts; + cfg.zone-definition.hosts; in mapAttrs' (hostname: hostOpts: nameValuePair hostOpts.ipv4-address ["${hostname}.${cfg.domain}" hostname]) other-hosts; - services.dhcpd4 = let network = cfg.network-definition; + services.dhcpd4 = let + zone = cfg.zone-definition; in { enable = true; @@ -109,7 +110,7 @@ in { ipAddress = hostOpts.ipv4-address; }) (filterAttrs (host: hostOpts: hostOpts.mac-address != null && hostOpts.ipv4-address != null) - network.hosts); + zone.hosts); interfaces = cfg.dhcp-interfaces; @@ -163,7 +164,7 @@ in { ipToBlock = ip: concatStringsSep "." (reverseList (take 3 (splitString "." ip))); compactHosts = - mapAttrsToList (host: data: data // { host = host; }) network.hosts; + mapAttrsToList (host: data: data // { host = host; }) zone.hosts; hostsByBlock = groupBy (host-data: ipToBlock host-data.ipv4-address) compactHosts; hostPtrRecord = host-data: @@ -184,7 +185,7 @@ in { (map (sshfp: "${host} IN SSHFP ${sshfp}") ssh-fingerprints); cnameRecord = alias: host: "${alias} IN CNAME ${host}"; - network = cfg.network-definition; + zone = cfg.zone-definition; known-hosts = config.fudo.hosts; @@ -219,17 +220,17 @@ in { $TTL 30m - ${optionalString (network.gssapi-realm != null) - ''_kerberos IN TXT "${network.gssapi-realm}"''} + ${optionalString (zone.gssapi-realm != null) + ''_kerberos IN TXT "${zone.gssapi-realm}"''} ${join-lines (imap1 (i: server-ip: "ns${toString i} IN A ${server-ip}") cfg.dns-servers)} - ${join-lines (mapAttrsToList hostARecord network.hosts)} - ${join-lines (mapAttrsToList hostSshFpRecords network.hosts)} - ${join-lines (mapAttrsToList cnameRecord network.aliases)} - ${join-lines network.verbatim-dns-records} - ${pkgs.lib.fudo.dns.srvRecordsToBindZone network.srv-records} + ${join-lines (mapAttrsToList hostARecord zone.hosts)} + ${join-lines (mapAttrsToList hostSshFpRecords zone.hosts)} + ${join-lines (mapAttrsToList cnameRecord zone.aliases)} + ${join-lines zone.verbatim-dns-records} + ${pkgs.lib.fudo.dns.srvRecordsToBindZone zone.srv-records} ${join-lines cfg.extra-records} ''; }] ++ blockZones; diff --git a/lib/fudo/zones.nix b/lib/fudo/zones.nix index fa94796..e690d1a 100644 --- a/lib/fudo/zones.nix +++ b/lib/fudo/zones.nix @@ -3,7 +3,7 @@ with lib; let zoneOpts = - import ../types/network-definition.nix { inherit lib; }; + import ../types/zone-definition.nix { inherit lib; }; in { options.fudo.zones = with types; mkOption { type = attrsOf (submodule zoneOpts); diff --git a/lib/types/network-definition.nix b/lib/types/zone-definition.nix similarity index 97% rename from lib/types/network-definition.nix rename to lib/types/zone-definition.nix index e3b9599..42f1966 100644 --- a/lib/types/network-definition.nix +++ b/lib/types/zone-definition.nix @@ -101,7 +101,7 @@ in { gssapi-realm = mkOption { type = nullOr str; - description = "Kerberos GSSAPI realm of the network."; + description = "Kerberos GSSAPI realm of the zone."; default = null; }; };