bin/pvl.hosts-dns
changeset 308 08176bed21e3
parent 299 df653511caf9
child 310 eb1829893317
--- a/bin/pvl.hosts-dns	Tue Dec 17 17:44:47 2013 +0200
+++ b/bin/pvl.hosts-dns	Wed Dec 18 22:35:48 2013 +0200
@@ -30,21 +30,45 @@
         if host.ip :
             yield pvl.dns.zone.ZoneRecord.A(host, host.ip)
         
+        if host.alias4 :
+            yield pvl.dns.zone.ZoneRecord.A(host.ALIAS4_FMT.format(host=host), host.ip)
+
+        if host.ip6 :
+            yield pvl.dns.zone.ZoneRecord.AAAA(host, host.ip6)
+
+        if host.alias6 :
+            yield pvl.dns.zone.ZoneRecord.AAAA(host.ALIAS6_FMT.format(host=host), host.ip6)
+
         for alias in host.alias :
             yield pvl.dns.zone.ZoneRecord.CNAME(alias, host)
 
+        for alias4 in host.alias4 :
+            yield pvl.dns.zone.ZoneRecord.CNAME(alias4, host.ALIAS4_FMT.format(host=host))
+
+        for alias6 in host.alias6 :
+            yield pvl.dns.zone.ZoneRecord.CNAME(alias6, host.ALIAS6_FMT.format(host=host))
+
 def process_hosts_forward (options, hosts, domain) :
     """
         Generate DNS ZoneRecords for the given domain's zone for hosts.
     """
 
     by_name = dict()
+    by_name_type = dict()
+    
+    # list of types thare are allowed to be present for a host
+    MULTI_TYPES = ('A', 'AAAA')
 
     for rr in process_hosts_names(options, hosts, domain) :
-        if rr.name in by_name :
+        if (rr.name, rr.type) in by_name_type :
+            raise ValueError("%s: duplicate name/type: %s: %s" % (rr.name, rr, by_name_type[(rr.name, rr.type)]))
+        elif rr.type in MULTI_TYPES :
+            by_name_type[(rr.name, rr.type)] = rr
+        elif rr.name in by_name :
             raise ValueError("%s: duplicate name: %s: %s" % (rr.name, rr, by_name[rr.name]))
-        else :
-            by_name[rr.name] = rr
+        
+        # always check these
+        by_name[rr.name] = rr
         
         # preserve ordering
         yield rr