X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Flinux%2Finterface.py;h=04d79593289f5729d4742f95af76d4fb110210e1;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=795c4d5d12574f3597f6d9d05ad72ffc2c610d0e;hpb=ab601cf5f7775071e59c6bdbb3369889244f70a5;p=nepi.git diff --git a/src/nepi/resources/linux/interface.py b/src/nepi/resources/linux/interface.py index 795c4d5d..04d79593 100644 --- a/src/nepi/resources/linux/interface.py +++ b/src/nepi/resources/linux/interface.py @@ -3,9 +3,8 @@ # Copyright (C) 2013 INRIA # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation; # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,7 +18,7 @@ from nepi.execution.attribute import Attribute, Types, Flags from nepi.execution.resource import ResourceManager, clsinit_copy, \ - ResourceState, reschedule_delay + ResourceState from nepi.resources.linux.node import LinuxNode from nepi.resources.linux.channel import LinuxChannel @@ -30,14 +29,15 @@ import re import tempfile import time -# TODO: UP, MTU attributes! - +# TODO: +# - check UP, MTU attributes! +# - clean up code and test! @clsinit_copy class LinuxInterface(ResourceManager): - _rtype = "LinuxInterface" + _rtype = "linux::Interface" _help = "Controls network devices on Linux hosts through the ifconfig tool" - _backend = "linux" + _platform = "linux" @classmethod def _register_attributes(cls): @@ -117,7 +117,7 @@ class LinuxInterface(ResourceManager): if err and proc.poll(): msg = " Error retrieving interface information " self.error(msg, out, err) - raise RuntimeError, "%s - %s - %s" % (msg, out, err) + raise RuntimeError("%s - %s - %s" % (msg, out, err)) # Check if an interface is found matching the RM attributes ifaces = out.split("\n\n") @@ -179,7 +179,7 @@ class LinuxInterface(ResourceManager): if not self.get("deviceName"): msg = "Unable to resolve interface " self.error(msg) - raise RuntimeError, msg + raise RuntimeError(msg) super(LinuxInterface, self).do_discover() @@ -209,7 +209,7 @@ class LinuxInterface(ResourceManager): if err and proc.poll(): msg = "Error configuring interface with command '%s'" % cmd self.error(msg, out, err) - raise RuntimeError, "%s - %s - %s" % (msg, out, err) + raise RuntimeError("%s - %s - %s" % (msg, out, err)) if ip6 and mask6: cmd = "ifconfig %(devname)s inet6 add %(ip6)s/%(mask6)d" % ({ @@ -222,7 +222,7 @@ class LinuxInterface(ResourceManager): if err and proc.poll(): msg = "Error seting ipv6 for interface using command '%s' " % cmd self.error(msg, out, err) - raise RuntimeError, "%s - %s - %s" % (msg, out, err) + raise RuntimeError("%s - %s - %s" % (msg, out, err)) super(LinuxInterface, self).do_provision() @@ -232,9 +232,9 @@ class LinuxInterface(ResourceManager): chan = self.channel if not node or node.state < ResourceState.PROVISIONED: - self.ec.schedule(reschedule_delay, self.deploy) + self.ec.schedule(self.reschedule_delay, self.deploy) elif not chan or chan.state < ResourceState.READY: - self.ec.schedule(reschedule_delay, self.deploy) + self.ec.schedule(self.reschedule_delay, self.deploy) else: # Verify if the interface exists in node. If not, configue # if yes, load existing configuration @@ -266,6 +266,7 @@ class LinuxInterface(ResourceManager): attr = self._attrs["up"] attr._value = up attr = self._attrs["mtu"] + attr._value = mtu def add_set_hooks(self): attrup = self._attrs["up"] @@ -275,7 +276,7 @@ class LinuxInterface(ResourceManager): attrmtu.set_hook = self.set_hook_mtu def set_hook_up(self, oldval, newval): - if oldval == newval: + if self.state == ResourceState.NEW or oldval == newval: return oldval # configure interface up @@ -294,7 +295,7 @@ class LinuxInterface(ResourceManager): return newval def set_hook_mtu(self, oldval, newval): - if oldval == newval: + if self.state == ResourceState.NEW or oldval == newval: return oldval cmd = "ifconfig %s mtu %d" % (self.get("deviceName"), newval)