mirror of
https://github.com/JulienMalka/snowfield.git
synced 2025-04-01 09:40:55 +02:00
feat(dns): add defaults to each zone through the module system
This commit is contained in:
parent
55a023f057
commit
5424d9f994
2 changed files with 29 additions and 28 deletions
|
@ -24,53 +24,60 @@ let
|
||||||
"ns1"
|
"ns1"
|
||||||
"ns2"
|
"ns2"
|
||||||
];
|
];
|
||||||
defaults = {
|
|
||||||
inherit SOA NS;
|
# Set some defaults for a zone
|
||||||
|
getSubmodulesCustom =
|
||||||
|
inputs@{ name, ... }:
|
||||||
|
lib.recursiveUpdate ((lib.head dnsLib.types.zone.getSubModules) ({ inherit name; } // inputs)) {
|
||||||
|
config = {
|
||||||
|
SOA = lib.mkDefault SOA;
|
||||||
|
NS = lib.mkDefault NS;
|
||||||
subdomains = {
|
subdomains = {
|
||||||
ns1 = {
|
ns1 = lib.mkDefault {
|
||||||
A = [ lib.snowfield.router.ips.public.ipv4 ];
|
A = [ lib.snowfield.router.ips.public.ipv4 ];
|
||||||
AAAA = [ lib.snowfield.router.ips.public.ipv6 ];
|
AAAA = [ lib.snowfield.router.ips.public.ipv6 ];
|
||||||
};
|
};
|
||||||
ns2 = {
|
ns2 = lib.mkDefault {
|
||||||
A = [ lib.snowfield.akhaten.ips.public.ipv4 ];
|
A = [ lib.snowfield.akhaten.ips.public.ipv4 ];
|
||||||
AAAA = [ lib.snowfield.akhaten.ips.public.ipv6 ];
|
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue