knotd: fix TTL

This commit is contained in:
jeltz 2025-10-12 21:05:19 +02:00
parent c7baba441f
commit 8e8bf490b9
Signed by: jeltz
GPG key ID: 800882B66C0C3326

View file

@ -53,6 +53,7 @@ class MultiRecords:
class A:
address: str
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.IN.A.A(
@ -64,6 +65,7 @@ class A:
class AAAA:
address: str
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.IN.AAAA.AAAA(
@ -75,6 +77,7 @@ class AAAA:
class PTR:
target: dns.name.Name
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.PTR.PTR(
@ -86,6 +89,7 @@ class PTR:
class CNAME:
target: dns.name.Name
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.CNAME.CNAME(
@ -98,6 +102,7 @@ class MX:
exchange: Annotated[dns.name.Name, MultiRecords]
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
preference: int = 10
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.MX.MX(
@ -112,6 +117,7 @@ class MX:
class NS:
target: Annotated[dns.name.Name, MultiRecords]
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.NS.NS(
@ -123,6 +129,7 @@ class NS:
class SPF:
data: str
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.SPF.SPF(
@ -134,6 +141,7 @@ class SPF:
class TXT:
data: str
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.TXT.TXT(
@ -148,6 +156,7 @@ class SRV:
port: int
priority: int = 10
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.IN.SRV.SRV(
@ -170,6 +179,7 @@ class SOA:
minimum: int
serial: int = 1
name: Annotated[dns.name.Name, MultiRecords] = dns.name.empty
ttl: int = 0
def rdata(self) -> dns.rdata.Rdata:
return dns.rdtypes.ANY.SOA.SOA(
@ -364,6 +374,10 @@ def main() -> int:
"required": True,
"options": spec_options_of_type(SOA),
},
"default_ttl": {
"type": "int",
"default": 3600,
},
"hosts": {"type": "dict", "default": {}},
"reverse_hosts": {"type": "dict", "default": {}},
}
@ -403,6 +417,7 @@ def main() -> int:
node = zone.get_node(record.name, create=True)
rdata = record.rdata()
dataset = node.get_rdataset(rdata.rdclass, rdata.rdtype, create=True)
dataset.ttl = record.ttl if record.ttl > 0 else module.params["default_ttl"]
dataset.add(rdata)
zone_text = zone.to_text(relativize=False, sorted=True)