pvl.hosts-import: fix alias4/alias6 processing
authorTero Marttila <terom@paivola.fi>
Thu, 19 Dec 2013 02:16:46 +0200
changeset 314 a1e4ef8dfb76
parent 313 c211ef65fd67
child 315 3ad1822cd91d
pvl.hosts-import: fix alias4/alias6 processing
bin/pvl.hosts-import
--- a/bin/pvl.hosts-import	Thu Dec 19 02:07:03 2013 +0200
+++ b/bin/pvl.hosts-import	Thu Dec 19 02:16:46 2013 +0200
@@ -550,19 +550,29 @@
 
     # scan for alias4
     for (host, domain), fields in by_name.items() :
-        alias4 = pvl.hosts.Host.ALIAS4_FMT.format(host=host)
-        alias_fields = by_name.get((alias4, domain))
+        for fmt, ip_field, alias_field in (
+                (pvl.hosts.Host.ALIAS4_FMT, 'ip', 'alias4'),
+                (pvl.hosts.Host.ALIAS6_FMT, 'ip6', 'alias6'),
+        ) :
+            alias = fmt.format(host=host)
+            alias_fields = by_name.get((alias, domain))
 
-        if not alias_fields :
-            continue
+            if not alias_fields :
+                continue
 
-        elif set(alias_fields) == set([('ip', ), ('alias', )]) :
-            log.warn("%s: mapped to alias4 on %s", host, alias4)
-            alias_fields[('alias4', )] = fields[('alias', )]
-            del by_name[(host, domain)]
+            elif alias_fields[(ip_field, )] != fields[(ip_field, )] :
+                log.warn("%s: %s %s collision with %s", host, alias_field, ip_field, alias)
+            elif ('alias', ) in alias_fields :
+                log.warn("%s: mapped to %s on %s", alias, alias_field, host)
+                fields[(alias_field, )] = alias_fields.get(('alias', ), ())
+                del by_name[(alias, domain)]
+            else :
+                log.warn("%s: %s mapped to %s, but no aliases", alias, alias_field, host)
 
     for (host, domain), fields in hosts :
-        if (host, domain) not in by_name :
+        fields = by_name.get((host, domain))
+
+        if not fields :
             # skip
             continue
 
@@ -661,6 +671,8 @@
                 'ethernet',
                 'owner',
                 'alias',
+                'alias4',
+                'alias6',
                 'boot',
         ) :
             for field, value in fields.iteritems() :