From: Martin Mares Date: Mon, 8 Jul 2024 19:23:45 +0000 (+0200) Subject: MX_list, SRV, alias X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=ab4d7c15b3e150855daf928ba579fd94979d23c8;p=pynsc.git MX_list, SRV, alias --- diff --git a/nsconfig/core.py b/nsconfig/core.py index e476b38..90be8dd 100644 --- a/nsconfig/core.py +++ b/nsconfig/core.py @@ -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