pvl.hosts: support foo:bar = ... extension fields
authorTero Marttila <terom@paivola.fi>
Mon, 17 Mar 2014 15:51:08 +0200
changeset 381 6fe465ce6d52
parent 380 78f192fe9e2c
child 382 ba47a64f61f9
pvl.hosts: support foo:bar = ... extension fields
pvl/hosts.py
--- a/pvl/hosts.py	Mon Mar 17 11:59:15 2014 +0200
+++ b/pvl/hosts.py	Mon Mar 17 15:51:08 2014 +0200
@@ -5,6 +5,7 @@
 import pvl.args
 import pvl.dns.zone
 
+import collections
 import configobj
 import ipaddr
 import optparse
@@ -121,13 +122,21 @@
             alias6 = ()
         
         ethernet = { }
+        extensions = collections.defaultdict(dict)
 
         for field, value in extra.iteritems() :
+            if ':' in field :
+                extension, field = field.split(':', 1)
+
+                extensions[extension][field] = value
+
+                continue
+
             if '.' in field :
                 field, instance = field.split('.')
             else :
                 instance = None
-
+            
             if field == 'ethernet' :
                 if instance :
                     ethernet[instance] = value
@@ -170,6 +179,8 @@
                 boot        = boot,
                 forward     = forward,
                 reverse     = reverse,
+
+                **extensions
         )
 
     def __init__ (self, host,
@@ -181,6 +192,7 @@
             boot=None,
             alias4=None, alias6=None,
             forward=None, reverse=None,
+            **extensions
     ) :
         """
             host        - str
@@ -209,6 +221,8 @@
         self.forward = forward
         self.reverse = reverse
 
+        self.extensions = extensions
+
     def fqdn (self) :
         if '.' in self.host :
             return self.host + '.'
@@ -216,7 +230,7 @@
             return pvl.dns.zone.fqdn(self.host, self.domain)
         else :
             raise ValueError("%s: have no fqdn/domain" % (self, ))
-
+    
     def __str__ (self) :
         return str(self.host)