pvl/hosts.py
changeset 381 6fe465ce6d52
parent 344 70799ad5928d
child 383 87b49aa52b3d
equal deleted inserted replaced
380:78f192fe9e2c 381:6fe465ce6d52
     3 """
     3 """
     4 
     4 
     5 import pvl.args
     5 import pvl.args
     6 import pvl.dns.zone
     6 import pvl.dns.zone
     7 
     7 
       
     8 import collections
     8 import configobj
     9 import configobj
     9 import ipaddr
    10 import ipaddr
    10 import optparse
    11 import optparse
    11 import os.path
    12 import os.path
    12 
    13 
   119             alias6 = alias6.split()
   120             alias6 = alias6.split()
   120         else :
   121         else :
   121             alias6 = ()
   122             alias6 = ()
   122         
   123         
   123         ethernet = { }
   124         ethernet = { }
       
   125         extensions = collections.defaultdict(dict)
   124 
   126 
   125         for field, value in extra.iteritems() :
   127         for field, value in extra.iteritems() :
       
   128             if ':' in field :
       
   129                 extension, field = field.split(':', 1)
       
   130 
       
   131                 extensions[extension][field] = value
       
   132 
       
   133                 continue
       
   134 
   126             if '.' in field :
   135             if '.' in field :
   127                 field, instance = field.split('.')
   136                 field, instance = field.split('.')
   128             else :
   137             else :
   129                 instance = None
   138                 instance = None
   130 
   139             
   131             if field == 'ethernet' :
   140             if field == 'ethernet' :
   132                 if instance :
   141                 if instance :
   133                     ethernet[instance] = value
   142                     ethernet[instance] = value
   134                 else :
   143                 else :
   135                     for eth in value.split() :
   144                     for eth in value.split() :
   168                 alias6      = alias6,
   177                 alias6      = alias6,
   169                 owner       = owner,
   178                 owner       = owner,
   170                 boot        = boot,
   179                 boot        = boot,
   171                 forward     = forward,
   180                 forward     = forward,
   172                 reverse     = reverse,
   181                 reverse     = reverse,
       
   182 
       
   183                 **extensions
   173         )
   184         )
   174 
   185 
   175     def __init__ (self, host,
   186     def __init__ (self, host,
   176             domain=None,
   187             domain=None,
   177             ip=None, ip6=None,
   188             ip=None, ip6=None,
   179             alias=(),
   190             alias=(),
   180             owner=None,
   191             owner=None,
   181             boot=None,
   192             boot=None,
   182             alias4=None, alias6=None,
   193             alias4=None, alias6=None,
   183             forward=None, reverse=None,
   194             forward=None, reverse=None,
       
   195             **extensions
   184     ) :
   196     ) :
   185         """
   197         """
   186             host        - str
   198             host        - str
   187             domain      - str
   199             domain      - str
   188             ip          - ipaddr.IPv4Address
   200             ip          - ipaddr.IPv4Address
   207         self.owner = owner
   219         self.owner = owner
   208         self.boot = boot
   220         self.boot = boot
   209         self.forward = forward
   221         self.forward = forward
   210         self.reverse = reverse
   222         self.reverse = reverse
   211 
   223 
       
   224         self.extensions = extensions
       
   225 
   212     def fqdn (self) :
   226     def fqdn (self) :
   213         if '.' in self.host :
   227         if '.' in self.host :
   214             return self.host + '.'
   228             return self.host + '.'
   215         elif self.domain :
   229         elif self.domain :
   216             return pvl.dns.zone.fqdn(self.host, self.domain)
   230             return pvl.dns.zone.fqdn(self.host, self.domain)
   217         else :
   231         else :
   218             raise ValueError("%s: have no fqdn/domain" % (self, ))
   232             raise ValueError("%s: have no fqdn/domain" % (self, ))
   219 
   233     
   220     def __str__ (self) :
   234     def __str__ (self) :
   221         return str(self.host)
   235         return str(self.host)
   222 
   236 
   223 def apply_host_includes (options, config_path, include) :
   237 def apply_host_includes (options, config_path, include) :
   224     """
   238     """