pvl/hosts/interface.py
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 19:48:19 +0200
changeset 735 008cfe47b194
child 736 75938aa0390b
permissions -rw-r--r--
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))