]> mj.ucw.cz Git - pynsc.git/commitdiff
MX_list, SRV, alias
authorMartin Mares <mj@ucw.cz>
Mon, 8 Jul 2024 19:23:45 +0000 (21:23 +0200)
committerMartin Mares <mj@ucw.cz>
Mon, 8 Jul 2024 19:23:45 +0000 (21:23 +0200)
nsconfig/core.py

index e476b387988a7637ba954f08c72a7dd1e75924a2..90be8dd96d0fd12f02e43a6f48f23a9a6dfaf9ab 100644 (file)
@@ -17,6 +17,7 @@ import dns.rdtypes.ANY.SOA
 import dns.rdtypes.ANY.TXT
 import dns.rdtypes.IN.A
 import dns.rdtypes.IN.AAAA
+import dns.rdtypes.IN.SRV
 from dns.zone import Zone
 from enum import Enum, auto
 import hashlib
@@ -25,7 +26,7 @@ import json
 from pathlib import Path
 import socket
 import sys
-from typing import Optional, Dict, List, Self, DefaultDict, TextIO, TYPE_CHECKING
+from typing import Optional, Dict, List, Self, DefaultDict, TextIO, Tuple, TYPE_CHECKING
 
 from nsconfig.util import flatten_list, parse_address, parse_network, parse_name, parse_duration
 from nsconfig.util import IPAddress, IPNetwork, IPAddr
@@ -76,6 +77,11 @@ class NscNode:
         )
         return self
 
+    def MX_list(self, mxs: List[Tuple[int, str]]) -> Self:
+        for pri, name in mxs:
+            self.MX(pri, name)
+        return self
+
     def NS(self, *names: str | List[str]) -> Self:
         for name in map(parse_name, flatten_list(names)):
             self._add(dns.rdtypes.ANY.NS.NS(RdataClass.IN, RdataType.NS, name))
@@ -94,10 +100,20 @@ class NscNode:
         self._add(dns.rdtypes.ANY.CNAME.CNAME(RdataClass.IN, RdataType.CNAME, target))
         return self
 
+    def SRV(self, priority: int, weight: int, port: int, target: Name | str) -> Self:
+        self._add(dns.rdtypes.IN.SRV.SRV(RdataClass.IN, RdataType.SRV, priority, weight, port, parse_name(target)))
+        return self
+
     def generic(self, typ: str, text: str) -> Self:
         self._add(dns.rdata.from_text(RdataClass.IN, typ, text))
         return self
 
+    def alias(self, *aliases: str) -> Self:
+        # FIXME: Inter-zone aliases?
+        for alias in flatten_list(aliases):
+            self.nsc_zone[alias].CNAME(self.name)
+        return self
+
 
 class NscZoneConfig:
     admin_email: str