feat(dns): add defaults to each zone through the module system

This commit is contained in:
Julien Malka 2024-08-25 12:13:35 +02:00
parent 55a023f057
commit 5424d9f994
Signed by: Luj
GPG key ID: 6FC74C847011FD83
2 changed files with 29 additions and 28 deletions

View file

@ -24,53 +24,60 @@ let
"ns1" "ns1"
"ns2" "ns2"
]; ];
defaults = {
inherit SOA NS; # Set some defaults for a zone
subdomains = { getSubmodulesCustom =
ns1 = { inputs@{ name, ... }:
A = [ lib.snowfield.router.ips.public.ipv4 ]; lib.recursiveUpdate ((lib.head dnsLib.types.zone.getSubModules) ({ inherit name; } // inputs)) {
AAAA = [ lib.snowfield.router.ips.public.ipv6 ]; config = {
}; SOA = lib.mkDefault SOA;
ns2 = { NS = lib.mkDefault NS;
A = [ lib.snowfield.akhaten.ips.public.ipv4 ]; subdomains = {
AAAA = [ lib.snowfield.akhaten.ips.public.ipv6 ]; ns1 = lib.mkDefault {
A = [ lib.snowfield.router.ips.public.ipv4 ];
AAAA = [ lib.snowfield.router.ips.public.ipv6 ];
};
ns2 = lib.mkDefault {
A = [ lib.snowfield.akhaten.ips.public.ipv4 ];
AAAA = [ lib.snowfield.akhaten.ips.public.ipv6 ];
};
};
}; };
}; };
};
in in
with lib; with lib;
{ {
options = { options = {
machine.meta.zones = mkOption { machine.meta.zones = mkOption {
type = types.attrsOf dnsLib.types.zone; type = types.attrsOf (
recursiveUpdate dnsLib.types.zone { getSubModules = [ getSubmodulesCustom ]; }
);
default = { }; default = { };
}; };
}; };
config = config =
let let
# list of domains that are defined in the current configuration throught virtualHosts # list of domains that are defined in the current configuration through virtualHosts
domains = lib.dns.domainsFromConfiguration allowedDomains config; domains = dns.domainsFromConfiguration allowedDomains config;
# AttrSet domain -> { records } # AttrSet domain -> { records }
recordsPerDomain = map ( recordsPerDomain = map (
domain: domain:
mapAttrs' ( mapAttrs' (
n: v: n: v:
nameValuePair (lib.dns.domainToZone allowedDomains n) ( nameValuePair (dns.domainToZone allowedDomains n) (
let let
subdomain = lib.dns.getDomainPrefix allowedDomains n; subdomain = dns.getDomainPrefix allowedDomains n;
in in
lib.recursiveUpdate ( if elem subdomain allowedDomains then v else { subdomains."${subdomain}" = v; }
if elem subdomain allowedDomains then v else { subdomains."${subdomain}" = v; }
) defaults
) )
) (lib.dns.domainToRecords domain cfg (isVPNDomain domain)) ) (dns.domainToRecords domain cfg (isVPNDomain domain))
) domains; ) domains;
in in
{ {
machine.meta.zones = lib.mkMerge recordsPerDomain; machine.meta.zones = mkMerge recordsPerDomain;
}; };
} }

View file

@ -82,12 +82,6 @@
"ipv4" "ipv4"
] config.machine.meta.ips) ] config.machine.meta.ips)
{ {
SOA = {
nameServer = "ns";
adminEmail = "dns@malka.sh";
serial = 0;
};
subdomains.${config.networking.hostName} = { subdomains.${config.networking.hostName} = {
A = [ config.machine.meta.ips.vpn.ipv4 ]; A = [ config.machine.meta.ips.vpn.ipv4 ];
}; };