X-Git-Url: https://git.llucax.com/software/pymin.git/blobdiff_plain/a2d8b5d4befdcc9c61c7060c6ab5dda4adfd509a..66d2cd3777f93c9c81f7e379fd24f73c4a6fad91:/pymin/services/ip/__init__.py diff --git a/pymin/services/ip/__init__.py b/pymin/services/ip/__init__.py index f699a0d..f967ae2 100644 --- a/pymin/services/ip/__init__.py +++ b/pymin/services/ip/__init__.py @@ -6,7 +6,7 @@ from os import path from pymin.seqtools import Sequence from pymin.dispatcher import handler, HandlerError, Handler from pymin.services.util import Restorable, ConfigWriter, InitdHandler, \ - TransactionalHandler, call + TransactionalHandler, SubHandler, call __ALL__ = ('IpHandler', 'Error','DeviceError', 'DeviceNotFoundError', 'RouteError', 'RouteNotFoundError', 'RouteAlreadyExistsError', @@ -81,45 +81,42 @@ class Route(Sequence): return 0 return cmp(id(self), id(other)) -class RouteHandler(Handler): +class RouteHandler(SubHandler): handler_help = u"Manage IP routes" - def __init__(self, devices): - self.devices = devices - @handler(u'Adds a route to a device') def add(self, device, net_addr, prefix, gateway): - if not device in self.devices: + if not device in self.parent.devices: raise DeviceNotFoundError(device) r = Route(net_addr, prefix, gateway) try: - self.devices[device].routes.index(r) + self.parent.devices[device].routes.index(r) raise RouteAlreadyExistsError(net_addr + '/' + prefix + '->' + gateway) except ValueError: - self.devices[device].routes.append(r) + self.parent.devices[device].routes.append(r) @handler(u'Deletes a route from a device') def delete(self, device, net_addr, prefix, gateway): - if not device in self.devices: + if not device in self.parent.devices: raise DeviceNotFoundError(device) r = Route(net_addr, prefix, gateway) try: - self.devices[device].routes.remove(r) + self.parent.devices[device].routes.remove(r) except ValueError: raise RouteNotFoundError(net_addr + '/' + prefix + '->' + gateway) @handler(u'Flushes routes from a device') def flush(self, device): - if not device in self.devices: + if not device in self.parent.devices: raise DeviceNotFoundError(device) - self.devices[device].routes = list() + self.parent.devices[device].routes = list() @handler(u'List routes') def list(self, device): try: - k = self.devices[device].routes.keys() + k = self.parent.devices[device].routes.keys() except ValueError: k = list() return k @@ -127,7 +124,7 @@ class RouteHandler(Handler): @handler(u'Get information about all routes') def show(self): try: - k = self.devices[device].routes.values() + k = self.parent.devices[device].routes.values() except ValueError: k = list() return k @@ -143,39 +140,36 @@ class Address(Sequence): def as_tuple(self): return (self.ip, self.prefix, self.broadcast) -class AddressHandler(Handler): +class AddressHandler(SubHandler): handler_help = u"Manage IP addresses" - def __init__(self, devices): - self.devices = devices - @handler(u'Adds an address to a device') def add(self, device, ip, prefix, broadcast='+'): - if not device in self.devices: + if not device in self.parent.devices: raise DeviceNotFoundError(device) - if ip in self.devices[device].addrs: + if ip in self.parent.devices[device].addrs: raise AddressAlreadyExistsError(ip) - self.devices[device].addrs[ip] = Address(ip, prefix, broadcast) + self.parent.devices[device].addrs[ip] = Address(ip, prefix, broadcast) @handler(u'Deletes an address from a device') def delete(self, device, ip): - if not device in self.devices: + if not device in self.parent.devices: raise DeviceNotFoundError(device) - if not ip in self.devices[device].addrs: + if not ip in self.parent.devices[device].addrs: raise AddressNotFoundError(ip) - del self.devices[device].addrs[ip] + del self.parent.devices[device].addrs[ip] @handler(u'Flushes addresses from a device') def flush(self, device): - if not device in self.devices: + if not device in self.parent.devices: raise DeviceNotFoundError(device) - self.devices[device].addrs = dict() + self.parent.devices[device].addrs = dict() @handler(u'List all addresses from a device') def list(self, device): try: - k = self.devices[device].addrs.keys() + k = self.parent.devices[device].addrs.keys() except ValueError: k = list() return k @@ -183,7 +177,7 @@ class AddressHandler(Handler): @handler(u'Get information about addresses from a device') def show(self, device): try: - k = self.devices[device].addrs.values() + k = self.parent.devices[device].addrs.values() except ValueError: k = list() return k @@ -200,14 +194,14 @@ class Device(Sequence): def as_tuple(self): return (self.name, self.mac) -class DeviceHandler(Handler): +class DeviceHandler(SubHandler): handler_help = u"Manage network devices" - def __init__(self, devices): + def __init__(self, parent): # FIXME remove templates to execute commands from mako.template import Template - self.devices = devices + self.parent = parent template_dir = path.join(path.dirname(__file__), 'templates') dev_fn = path.join(template_dir, 'device') self.device_template = Template(filename=dev_fn) @@ -267,9 +261,9 @@ class IpHandler(Restorable, ConfigWriter, TransactionalHandler): self._config_writer_cfg_dir = config_dir self._config_build_templates() self._restore() - self.addr = AddressHandler(self.devices) - self.route = RouteHandler(self.devices) - self.dev = DeviceHandler(self.devices) + self.addr = AddressHandler(self) + self.route = RouteHandler(self) + self.dev = DeviceHandler(self) def _write_config(self): r"_write_config() -> None :: Execute all commands."