else:
self._add(dns.rdtypes.IN.AAAA.AAAA(RdataClass.IN, RdataType.AAAA, str(a)))
if reverse:
- self.nsc_zone.nsc._add_reverse_mapping(a, parse_name(self.name + '.' + self.nsc_zone.name) if self.name != "" else parse_name(self.nsc_zone.name + '.'))
+ self.nsc_zone.nsc._add_reverse_mapping(a, parse_name(self.name, origin=self.nsc_zone.dns_name))
return self
def MX(self, pri: int, name: str) -> Self:
class NscZone:
nsc: 'Nsc'
name: str
+ dns_name: Name
safe_name: str # For use in file names
zone_type: ZoneType
reverse_for: Optional[IPNetwork]
**kwargs) -> None:
self.nsc = nsc
self.name = name
+ self.dns_name = dns.name.from_text(name)
self.safe_name = name.replace('/', '@')
self.config = NscZoneConfig(**kwargs).finalize()
self.reverse_for = reverse_for
from dns.name import Name
from ipaddress import ip_address, IPv4Address, IPv6Address, ip_network, IPv4Network, IPv6Network
from datetime import timedelta
-from typing import Any, List
+from typing import Any, List, Optional
IPAddress = IPv4Address | IPv6Address
raise ValueError('Cannot parse IP network')
-def parse_name(name: str, relative: bool = False) -> Name:
+def parse_name(name: str, relative: bool = False, origin: Optional[Name] = None) -> Name:
# FIXME: Names with escaped dots
- if '.' in name and not relative:
+ if '.' in name and not relative and origin is None:
return dns.name.from_text(name)
else:
- return dns.name.from_text(name, origin=None)
+ return dns.name.from_text(name, origin=origin)
def parse_duration(delta: timedelta | int) -> int: