Better octodns file structure
This commit is contained in:
parent
190dde841e
commit
35bc79265c
33 changed files with 219 additions and 381 deletions
dns/implementation
37
dns/implementation/gen-zone-file.nix
Normal file
37
dns/implementation/gen-zone-file.nix
Normal file
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
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}
|
||||
''
|
Loading…
Add table
Add a link
Reference in a new issue