resolver: add zone kwarg to add_host
This will allow OneDNS.sync to build a new zone and instantly swap it with the currently active zone to minimize downtime.master
parent
ec8c1902ab
commit
6892508b9e
|
@ -52,27 +52,30 @@ class DynamicResolver(server.BaseResolver):
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self.zone = []
|
self.zone = []
|
||||||
|
|
||||||
def add_host(self, name, ip):
|
def add_host(self, name, ip, zone=None):
|
||||||
self._add_forward(name, ip)
|
zone = zone or self.zone
|
||||||
self._add_reverse(ip, name)
|
self._add_forward(name, ip, zone=zone)
|
||||||
|
self._add_reverse(ip, name, zone=zone)
|
||||||
|
|
||||||
def _get_fqdn(self, name):
|
def _get_fqdn(self, name):
|
||||||
return utils.get_fqdn(name, self.domain)
|
return utils.get_fqdn(name, self.domain)
|
||||||
|
|
||||||
def _add_forward(self, name, ip):
|
def _add_forward(self, name, ip, zone=None):
|
||||||
|
zone = zone or self.zone
|
||||||
f = dnslib.RR(rname=dnslib.DNSLabel(self._get_fqdn(name)),
|
f = dnslib.RR(rname=dnslib.DNSLabel(self._get_fqdn(name)),
|
||||||
rtype=dnslib.QTYPE.reverse['A'],
|
rtype=dnslib.QTYPE.reverse['A'],
|
||||||
rclass=dnslib.CLASS.reverse['IN'],
|
rclass=dnslib.CLASS.reverse['IN'],
|
||||||
rdata=dns.A(ip))
|
rdata=dns.A(ip))
|
||||||
self.zone.append((f.rname, 'A', f))
|
zone.append((f.rname, 'A', f))
|
||||||
|
|
||||||
def _add_reverse(self, ip, name):
|
def _add_reverse(self, ip, name, zone=None):
|
||||||
|
zone = zone or self.zone
|
||||||
ip = IP(ip)
|
ip = IP(ip)
|
||||||
r = dnslib.RR(rname=dnslib.DNSLabel(ip.reverseName()),
|
r = dnslib.RR(rname=dnslib.DNSLabel(ip.reverseName()),
|
||||||
rtype=dnslib.QTYPE.reverse['PTR'],
|
rtype=dnslib.QTYPE.reverse['PTR'],
|
||||||
rclass=dnslib.CLASS.reverse['IN'],
|
rclass=dnslib.CLASS.reverse['IN'],
|
||||||
rdata=dns.PTR(self._get_fqdn(name)))
|
rdata=dns.PTR(self._get_fqdn(name)))
|
||||||
self.zone.append((r.rname, 'PTR', r))
|
zone.append((r.rname, 'PTR', r))
|
||||||
|
|
||||||
def start(self, dns_address='0.0.0.0', dns_port=53,
|
def start(self, dns_address='0.0.0.0', dns_port=53,
|
||||||
api_address='127.0.0.1', api_port=8000, tcp=False, udplen=0,
|
api_address='127.0.0.1', api_port=8000, tcp=False, udplen=0,
|
||||||
|
|
Loading…
Reference in New Issue