pvl/hosts/host.py
changeset 740 74352351d6f5
parent 739 5149c39f3dfc
equal deleted inserted replaced
739:5149c39f3dfc 740:74352351d6f5
     1 import collections
     1 import collections
     2 import ipaddr
     2 import ipaddress
     3 import logging; log = logging.getLogger('pvl.hosts.host')
     3 import logging; log = logging.getLogger('pvl.hosts.host')
     4 import pvl.dns
     4 import pvl.dns
     5 
     5 
     6 class HostError (Exception):
     6 class HostError (Exception):
     7     """
     7     """
   154 
   154 
   155         extensions = {extension_cls.EXTENSION: extension_cls.build(**params) for extension_cls, params in extension_classes.iteritems()}
   155         extensions = {extension_cls.EXTENSION: extension_cls.build(**params) for extension_cls, params in extension_classes.iteritems()}
   156 
   156 
   157         return cls(name,
   157         return cls(name,
   158                 domain      = domain,
   158                 domain      = domain,
   159                 ip4         = parse_ip(ip, ipaddr.IPv4Address),
   159                 ip4         = parse_ip(ip, ipaddress.IPv4Address),
   160                 ip6         = parse_ip(ip6, ipaddr.IPv6Address),
   160                 ip6         = parse_ip(ip6, ipaddress.IPv6Address),
   161                 ethernet    = parse_dict(ethernet,  parse_ethernet),
   161                 ethernet    = parse_dict(ethernet,  parse_ethernet),
   162                 owner       = owner,
   162                 owner       = owner,
   163                 location    = parse_location(location, domain),
   163                 location    = parse_location(location, domain),
   164                 alias       = parse_list(alias),
   164                 alias       = parse_list(alias),
   165                 alias4      = parse_list(alias4),
   165                 alias4      = parse_list(alias4),
   181             extensions={},
   181             extensions={},
   182     ):
   182     ):
   183         """
   183         """
   184             name        - str
   184             name        - str
   185             domain      - str
   185             domain      - str
   186             ip4         - primary ipaddr.IPv4Address
   186             ip4         - ipaddress.IPv4Address
   187             ip6         - primary ipaddr.IPv6Address
   187             ip6         - ipaddress.IPv6Address
   188             ethernet    - { index: ethernet }
   188             ethernet    - { index: ethernet }
   189             alias       - [ str ]: generate CNAMEs for given relative names
   189             alias       - [ str ]: generate CNAMEs for given relative names
   190             owner       - str: LDAP uid
   190             owner       - str: LDAP uid
   191             location    - None or (name, domain)
   191             location    - None or (name, domain)
   192             alias4      - [ str ]: generate additional A records for given relative names
   192             alias4      - [ str ]: generate additional A records for given relative names
   222 
   222 
   223         if self.ip4:
   223         if self.ip4:
   224             return self.ip4
   224             return self.ip4
   225         else:
   225         else:
   226             # sorts first
   226             # sorts first
   227             return ipaddr.IPAddress(0)
   227             return ipaddress.IPvAddress(0)
   228 
   228 
   229     def addresses (self):
   229     def addresses (self):
   230         """
   230         """
   231             Yield (sublabel, ipaddr) records.
   231             Yield (sublabel, ipaddress.IP*Address) records.
   232         """
   232         """
   233 
   233 
   234         if self.ip4:
   234         if self.ip4:
   235             yield None, self.ip4
   235             yield None, self.ip4
   236 
   236