class NscNode:
nsc_zone: 'NscZonePrimary'
- name: str
+ name: Name
node: Node
_ttl: int
def __init__(self, nsc_zone: 'NscZonePrimary', name: str) -> None:
self.nsc_zone = nsc_zone
- self.name = name
- self.node = nsc_zone.zone.find_node(parse_name(name, NameParseMode.relative), create=True)
+ self.name = self._parse_lhs_name(name)
+ self.node = nsc_zone.zone.find_node(self.name, create=True)
self._ttl = nsc_zone.config.default_ttl
def ttl(self, seconds: Optional[int] = None, **kwargs) -> Self:
rds = self.node.find_rdataset(rec.rdclass, rec.rdtype, create=True)
rds.add(rec, ttl=self._ttl)
- def _parse_name(self, name, **kwargs):
+ def _parse_lhs_name(self, name, **kwargs):
+ return parse_name(name, mode=NameParseMode.relative, **kwargs)
+
+ def _parse_rhs_name(self, name, **kwargs):
return parse_name(name, mode=self.nsc_zone.config.name_parse_mode, **kwargs)
def A(self, *addrs: IPAddr, reverse: bool = True) -> Self:
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, mode=NameParseMode.relative, origin=self.nsc_zone.dns_name))
+ self.nsc_zone.nsc._add_reverse_mapping(a, self.name.choose_relativity(origin=self.nsc_zone.dns_name, relativize=False))
return self
def CNAME(self, target: Name | str) -> Self:
def MX(self, pri: int, name: str) -> Self:
self._add(
- dns.rdtypes.ANY.MX.MX(RdataClass.IN, RdataType.MX, pri, self._parse_name(name))
+ dns.rdtypes.ANY.MX.MX(RdataClass.IN, RdataType.MX, pri, self._parse_rhs_name(name))
)
return self
def NS(self, *names: str | List[str]) -> Self:
for name in flatten_list(names):
- self._add(dns.rdtypes.ANY.NS.NS(RdataClass.IN, RdataType.NS, self._parse_name(name)))
+ self._add(dns.rdtypes.ANY.NS.NS(RdataClass.IN, RdataType.NS, self._parse_rhs_name(name)))
return self
def PTR(self, target: Name | str) -> Self:
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, self._parse_name(target)))
+ self._add(dns.rdtypes.IN.SRV.SRV(RdataClass.IN, RdataType.SRV, priority, weight, port, self._parse_rhs_name(target)))
return self
def TXT(self, *text: str | List[str]) -> Self:
raise ValueError('Cannot parse IP network')
-def parse_name(name: str, mode: NameParseMode = NameParseMode.relative, origin: Optional[Name] = None) -> Name:
+def parse_name(name: str, mode: NameParseMode = NameParseMode.relative) -> Name:
if name.endswith('.@'):
- return dns.name.from_text(name[:-2], origin=origin)
+ return dns.name.from_text(name[:-2], origin=None)
if mode == NameParseMode.relative:
- return dns.name.from_text(name, origin=origin)
+ return dns.name.from_text(name, origin=None)
elif mode == NameParseMode.absolute:
if '.' in name:
return dns.name.from_text(name)
else:
- return dns.name.from_text(name, origin=origin)
+ return dns.name.from_text(name, origin=None)
else:
...