pvl/hosts/interface.py
changeset 735 008cfe47b194
child 736 75938aa0390b
equal deleted inserted replaced
734:5770ed34c1f0 735:008cfe47b194
       
     1 import ipaddress, ipaddr # XXX: conversion
       
     2 import pvl.hosts
       
     3 
       
     4 def parse_interfaces(interfaces):
       
     5     for interface, value in interfaces.iteritems():
       
     6         if not isinstance(value, dict):
       
     7             yield (interface, 0), ipaddress.ip_interface(value)
       
     8         else:
       
     9             for unit, ip in value.iteritems():
       
    10                 yield (interface, int(unit)), ipaddress.ip_interface(value)
       
    11 
       
    12 @pvl.hosts.extension
       
    13 class HostInterface(object):
       
    14     EXTENSION = 'interface'
       
    15 
       
    16     @classmethod
       
    17     def build (cls, **interfaces):
       
    18         return cls(dict(parse_interfaces(interfaces)))
       
    19 
       
    20     def __init__ (self, interfaces):
       
    21         self.interfaces = interfaces
       
    22 
       
    23     def iter_interfaces (self):
       
    24         for (iface, unit), ip in self.interfaces.iteritems():
       
    25             family = {4: 'inet', 6: 'inet6' }[ip.version]
       
    26 
       
    27             yield iface, unit, family, ip
       
    28 
       
    29     def addresses (self):
       
    30         for (iface, unit), ip in self.interfaces.iteritems():
       
    31             # XXX: ipaddr
       
    32             yield iface, ipaddr.IPAddress(str(ip.ip))