From 8e8bf490b96f775157a67b00a65cca54bfcc78ac Mon Sep 17 00:00:00 2001 From: Jeltz Date: Sun, 12 Oct 2025 21:05:19 +0200 Subject: [PATCH] knotd: fix TTL --- roles/knotd/library/dns_zone.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/roles/knotd/library/dns_zone.py b/roles/knotd/library/dns_zone.py index d428474..6b8e002 100755 --- a/roles/knotd/library/dns_zone.py +++ b/roles/knotd/library/dns_zone.py @@ -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)