feat: add dns lib

This commit is contained in:
Julien Malka 2024-08-12 18:12:37 +02:00
parent 224a0dcd24
commit d7e0225487
Signed by: Luj
GPG key ID: 6FC74C847011FD83
2 changed files with 43 additions and 0 deletions

View file

@ -58,4 +58,8 @@ rec {
}).machine.meta
) (final.filterAttrs (_: v: v == "directory") (readDir ../machines));
dns = import ./dns.nix {
lib = final;
dnsLib = (import inputs.dns).lib;
};
}

39
lib/dns.nix Normal file
View file

@ -0,0 +1,39 @@
{ lib, dnsLib, ... }:
with lib;
rec {
hasSuffix' = flip strings.hasSuffix;
domainToZone = allowedDomains: domain: (findFirst (hasSuffix' domain) null allowedDomains);
filterElligibleDomains = allowedDomains: domain: domainToZone allowedDomains domain != null;
domainsFromConfiguration =
allowedDomains: config:
filter (filterElligibleDomains allowedDomains) (attrNames config.services.nginx.virtualHosts);
ipsToRecord =
ipType: ipValue:
with dnsLib.combinators;
if ipType == "ipv4" then { A = [ ipValue ]; } else { AAAA = [ ipValue ]; };
domainToRecords =
domain: machineMeta: isVPNDomain:
with dnsLib.combinators;
(optionalAttrs isVPNDomain (
mapAttrsWithMerge (n: v: nameValuePair domain (ipsToRecord n v)) machineMeta.ips.vpn
))
// (optionalAttrs (!isVPNDomain) (
mapAttrsWithMerge (n: v: nameValuePair domain (ipsToRecord n v)) machineMeta.ips.public
));
getDomainPrefix =
allowedDomains: domain:
let
zone = domainToZone allowedDomains domain;
in
strings.removeSuffix ".${zone}" domain;
}