nixos/estuary: Extract record gen utils to separate lib
This commit is contained in:
		@@ -11,6 +11,8 @@ rec {
 | 
			
		||||
  attrsToNVList = mapAttrsToList nameValuePair;
 | 
			
		||||
 | 
			
		||||
  inherit (import ./net.nix { inherit lib; }) net;
 | 
			
		||||
  dns = import ./dns.nix { inherit lib; };
 | 
			
		||||
 | 
			
		||||
  # Yoinked from nixpkgs/nixos/modules/services/networking/nat.nix
 | 
			
		||||
  isIPv6 = ip: length (lib.splitString ":" ip) > 2;
 | 
			
		||||
  parseIPPort = ipp:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								lib/dns.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								lib/dns.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
{ lib }: 
 | 
			
		||||
let
 | 
			
		||||
  inherit (builtins) filter;
 | 
			
		||||
  inherit (lib)
 | 
			
		||||
    concatStringsSep concatMapStringsSep mapAttrsToList filterAttrs flatten optionalString;
 | 
			
		||||
in
 | 
			
		||||
rec {
 | 
			
		||||
  genRecords =
 | 
			
		||||
    {
 | 
			
		||||
      allAssignments,
 | 
			
		||||
      domain,
 | 
			
		||||
      names,
 | 
			
		||||
      f,
 | 
			
		||||
    }:
 | 
			
		||||
    concatStringsSep
 | 
			
		||||
      "\n"
 | 
			
		||||
      (filter
 | 
			
		||||
        (s: s != "")
 | 
			
		||||
        (flatten
 | 
			
		||||
          (map
 | 
			
		||||
            (name: (mapAttrsToList
 | 
			
		||||
              (_: as: f as."${name}")
 | 
			
		||||
              (filterAttrs
 | 
			
		||||
                (_: as: as ? "${name}" && as."${name}".domain == domain && as."${name}".visible)
 | 
			
		||||
                allAssignments)))
 | 
			
		||||
            names)));
 | 
			
		||||
 | 
			
		||||
  fwdRecords =
 | 
			
		||||
    {
 | 
			
		||||
      allAssignments,
 | 
			
		||||
      domain,
 | 
			
		||||
      names,
 | 
			
		||||
    }:
 | 
			
		||||
    genRecords {
 | 
			
		||||
      inherit allAssignments domain names;
 | 
			
		||||
      f = a: ''
 | 
			
		||||
        ${a.name} IN A ${a.ipv4.address}
 | 
			
		||||
        ${optionalString (a.ipv6.address != null) "${a.name} IN AAAA ${a.ipv6.address}"}
 | 
			
		||||
        ${concatMapStringsSep "\n" (alt: "${alt} IN CNAME ${a.name}") a.altNames}
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
  ptrRecords =
 | 
			
		||||
    {
 | 
			
		||||
      allAssignments,
 | 
			
		||||
      domain,
 | 
			
		||||
      names,
 | 
			
		||||
      ndots,
 | 
			
		||||
    }:
 | 
			
		||||
    genRecords {
 | 
			
		||||
      inherit allAssignments domain names;
 | 
			
		||||
      f = a:
 | 
			
		||||
        optionalString
 | 
			
		||||
          a.ipv4.genPTR
 | 
			
		||||
          ''@@PTR:${a.ipv4.address}:${toString ndots}@@ IN PTR ${a.name}.${domain}.'';
 | 
			
		||||
    };
 | 
			
		||||
  ptr6Records =
 | 
			
		||||
    {
 | 
			
		||||
      allAssignments,
 | 
			
		||||
      domain,
 | 
			
		||||
      names,
 | 
			
		||||
      ndots,
 | 
			
		||||
    }:
 | 
			
		||||
    genRecords {
 | 
			
		||||
      inherit allAssignments domain names;
 | 
			
		||||
      f = a:
 | 
			
		||||
        optionalString
 | 
			
		||||
          (a.ipv6.address != null && a.ipv6.genPTR)
 | 
			
		||||
          ''@@PTR:${a.ipv6.address}:${toString ndots}@@ IN PTR ${a.name}.${domain}.'';
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user