mirror of
https://github.com/JulienMalka/snowfield.git
synced 2025-03-30 08:40:52 +02:00
feat: add dns lib
This commit is contained in:
parent
224a0dcd24
commit
d7e0225487
2 changed files with 43 additions and 0 deletions
|
@ -58,4 +58,8 @@ rec {
|
||||||
}).machine.meta
|
}).machine.meta
|
||||||
) (final.filterAttrs (_: v: v == "directory") (readDir ../machines));
|
) (final.filterAttrs (_: v: v == "directory") (readDir ../machines));
|
||||||
|
|
||||||
|
dns = import ./dns.nix {
|
||||||
|
lib = final;
|
||||||
|
dnsLib = (import inputs.dns).lib;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
39
lib/dns.nix
Normal file
39
lib/dns.nix
Normal 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;
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue