|
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)) |