--- a/pvl/hosts/host.py Wed Feb 25 14:41:51 2015 +0200
+++ b/pvl/hosts/host.py Wed Feb 25 14:52:53 2015 +0200
@@ -151,9 +151,13 @@
location - location (name, domain) or None
alias4 - list (CNAME -> A)
alias6 - list (CNAME -> AAAA)
- forward - generate forward records, or CNAME into given zone
- reverse - generate reverse records, or CNAME into given zone
- down - not online
+ forward - None: generate forward zone A/AAAA records per ip/ip6
+ False: omit A/AAAA records
+ str: generate forward zone CNAME to given fqdn
+ reverse - None: generate reverse zone PTR records per ip/ip6
+ False: omit PTR records for ip/ip6
+ str: generate IPv4 reverse zone CNAME to given fqdn, and omit IPv6 PTR
+ down - mark as offline for polling
"""
self.name = name
--- a/pvl/hosts/tests.py Wed Feb 25 14:41:51 2015 +0200
+++ b/pvl/hosts/tests.py Wed Feb 25 14:52:53 2015 +0200
@@ -122,7 +122,7 @@
self.assertZoneEquals(zone.host_forward(h, 'test'), { })
- def testHostForwardIP(self):
+ def testHostIP(self):
h = host.Host.build('host', 'domain',
ip = '192.0.2.1',
ip6 = '2001:db8::192.0.2.1',
@@ -133,6 +133,14 @@
('host', 'AAAA'): ['2001:db8::c000:201'],
})
+ self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
+ ('1', 'PTR'): ['host.domain.'],
+ })
+
+ self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
+ ('1.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): ['host.domain.'],
+ })
+
def testHostDelegate(self):
h = host.Host.build('host', 'example.com',
ip = '192.0.2.1',
@@ -148,6 +156,10 @@
self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
('1', 'CNAME'): ['1.0/28.2.0.192.in-addr.arpa.'],
})
+
+ self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
+
+ })
if __name__ == '__main__':
unittest.main()
--- a/pvl/hosts/zone.py Wed Feb 25 14:41:51 2015 +0200
+++ b/pvl/hosts/zone.py Wed Feb 25 14:52:53 2015 +0200
@@ -86,13 +86,21 @@
def host_reverse (host, prefix) :
"""
- Yield (ip, fqnd) for host within given prefix.
+ Yield (ipaddr.IPAddress, ZoneRecord) tuples for host within given prefix's reverse-dns zone.
"""
if prefix.version == 4 :
ip = host.ip
+
+ # reverse= is IPv4-only
+ reverse = host.reverse
+
elif prefix.version == 6 :
ip = host.ip6
+
+ # if reverse= is set, always omit, for lack of reverse6=
+ reverse = None if host.reverse is None else False
+
else :
raise ValueError("%s: unknown ip version: %s" % (prefix, prefix.version))
@@ -107,21 +115,21 @@
# relative label
label = pvl.dns.reverse_label(prefix, ip)
- if host.reverse :
- alias = pvl.dns.fqdn(host.reverse)
+ if reverse:
+ alias = pvl.dns.fqdn(reverse)
log.info("%s %s[%s]: CNAME %s", host, prefix, ip, alias)
yield ip, pvl.dns.zone.ZoneRecord.CNAME(label, alias)
- elif host.reverse is None :
+ elif reverse is None :
fqdn = host.fqdn()
log.info("%s %s[%s]: PTR %s", host, prefix, ip, fqdn)
yield ip, pvl.dns.zone.ZoneRecord.PTR(label, fqdn)
- else :
+ else:
log.info("%s %s[%s]: omit", host, prefix, ip)
def apply_hosts_forward (options, hosts, origin) :