pvl.hosts.interface: sub-interfaces for a host, which are not associated with any separate domain/network
import ipaddress, ipaddr # XXX: conversion
import pvl.hosts
def parse_interfaces(interfaces):
for interface, value in interfaces.iteritems():
if not isinstance(value, dict):
yield (interface, 0), ipaddress.ip_interface(value)
else:
for unit, ip in value.iteritems():
yield (interface, int(unit)), ipaddress.ip_interface(value)
@pvl.hosts.extension
class HostInterface(object):
EXTENSION = 'interface'
@classmethod
def build (cls, **interfaces):
return cls(dict(parse_interfaces(interfaces)))
def __init__ (self, interfaces):
self.interfaces = interfaces
def iter_interfaces (self):
for (iface, unit), ip in self.interfaces.iteritems():
family = {4: 'inet', 6: 'inet6' }[ip.version]
yield iface, unit, family, ip
def addresses (self):
for (iface, unit), ip in self.interfaces.iteritems():
# XXX: ipaddr
yield iface, ipaddr.IPAddress(str(ip.ip))