29 |
29 |
30 yield pvl.dns.ZoneRecord.CNAME(label, forward) |
30 yield pvl.dns.ZoneRecord.CNAME(label, forward) |
31 |
31 |
32 elif host.forward is None: |
32 elif host.forward is None: |
33 # forward |
33 # forward |
34 for sublabel, (ip4, ip6) in host.ip.iteritems(): |
34 for sublabel, ip in host.addresses(): |
35 if sublabel: |
35 if sublabel: |
36 sublabel = pvl.dns.join(sublabel, label) |
36 sublabel = pvl.dns.join(sublabel, label) |
37 else: |
37 else: |
38 sublabel = label |
38 sublabel = label |
39 |
39 |
40 if ip4: |
40 if ip.version == 4: |
41 log.info("%s: ip: %s@%s A %s", host, sublabel, origin, ip4) |
41 log.info("%s: ip: %s@%s A %s", host, sublabel, origin, ip) |
42 |
42 |
43 yield pvl.dns.ZoneRecord.A(sublabel, ip4) |
43 yield pvl.dns.ZoneRecord.A(sublabel, ip) |
44 |
44 |
45 if ip6: |
45 elif ip.version == 6: |
46 log.info("%s: ip6: %s@%s AAAA %s", host, label, origin, ip6) |
46 log.info("%s: ip6: %s@%s AAAA %s", host, label, origin, ip) |
47 |
47 |
48 yield pvl.dns.ZoneRecord.AAAA(sublabel, ip6) |
48 yield pvl.dns.ZoneRecord.AAAA(sublabel, ip) |
|
49 |
|
50 else: |
|
51 raise ValueError(ip) |
49 |
52 |
50 else: |
53 else: |
51 log.info("%s: skip forward", host) |
54 log.info("%s: skip forward", host) |
52 return |
55 return |
53 |
56 |
77 def host_reverse (host, prefix) : |
80 def host_reverse (host, prefix) : |
78 """ |
81 """ |
79 Yield (ipaddr.IPAddress, ZoneRecord) tuples for host within given prefix's reverse-dns zone. |
82 Yield (ipaddr.IPAddress, ZoneRecord) tuples for host within given prefix's reverse-dns zone. |
80 """ |
83 """ |
81 |
84 |
82 for sublabel, (ip4, ip6) in host.ip.iteritems(): |
85 for sublabel, ip in host.addresses(): |
83 if prefix.version == 4: |
86 if ip.version != prefix.version: |
84 ip = ip4 |
|
85 |
|
86 # reverse= is IPv4-only |
|
87 reverse = host.reverse |
|
88 |
|
89 elif prefix.version == 6: |
|
90 ip = ip6 |
|
91 |
|
92 # if reverse= is set, always omit, for lack of reverse6= |
|
93 reverse = None if host.reverse is None else False |
|
94 |
|
95 else: |
|
96 raise ValueError("%s: unknown ip version: %s" % (prefix, prefix.version)) |
|
97 |
|
98 if not ip: |
|
99 log.debug("%s: no ip%d", host, prefix.version) |
|
100 continue |
87 continue |
101 |
88 |
102 if ip not in prefix: |
89 if ip not in prefix: |
103 log.debug("%s: %s out of prefix: %s", host, ip, prefix) |
90 log.debug("%s: %s out of prefix: %s", host, ip, prefix) |
104 continue |
91 continue |
105 |
92 |
|
93 if ip.version == 4: |
|
94 # reverse= is IPv4-only |
|
95 reverse = host.reverse |
|
96 |
|
97 elif prefix.version == 6: |
|
98 # if reverse= is set, always omit, for lack of reverse6= |
|
99 reverse = None if host.reverse is None else False |
|
100 |
106 # relative label |
101 # relative label |
107 label = pvl.dns.reverse_label(prefix, ip) |
102 label = pvl.dns.reverse_label(prefix, ip) |
108 |
103 |
109 if reverse: |
104 if reverse: |
110 alias = pvl.dns.fqdn(reverse) |
105 alias = pvl.dns.fqdn(reverse) |