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
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
)
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))
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