mirror of
https://github.com/JulienMalka/snowfield.git
synced 2025-03-25 21:30:52 +01: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
|
||||
) (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