38 lines
1 KiB
Nix
38 lines
1 KiB
Nix
|
{
|
||
|
config,
|
||
|
pkgs,
|
||
|
lib ? pkgs.lib,
|
||
|
}:
|
||
|
let
|
||
|
format = pkgs.formats.yaml { };
|
||
|
cfg = config.satellite.dns;
|
||
|
grouped = builtins.groupBy (entry: entry.zone) cfg.records;
|
||
|
cpInvocations = lib.mapAttrsToList (
|
||
|
zone: group:
|
||
|
let
|
||
|
grouped = builtins.groupBy (entry: entry.at) group;
|
||
|
contents = lib.mapAttrs (
|
||
|
at: entries:
|
||
|
lib.lists.forEach entries (
|
||
|
entry:
|
||
|
let
|
||
|
content =
|
||
|
if builtins.typeOf entry.value == "list" then
|
||
|
{ values = entry.value; }
|
||
|
else
|
||
|
{ inherit (entry) value; };
|
||
|
cloudflare = if entry.enableCloudflareProxy then { octodns.cloudflare.proxied = true; } else { };
|
||
|
in
|
||
|
{ inherit (entry) ttl type; } // content // cloudflare
|
||
|
)
|
||
|
) grouped;
|
||
|
file = format.generate "${zone}.yaml" contents;
|
||
|
in
|
||
|
"cp ${file} $out/${zone}.yaml"
|
||
|
) grouped;
|
||
|
in
|
||
|
pkgs.runCommand "octodns-zones" { } ''
|
||
|
mkdir $out
|
||
|
${lib.concatStringsSep "\n" cpInvocations}
|
||
|
''
|