From ea0cec9040a8c8cb4d9bce35bd05d39472e7c132 Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Fri, 6 Feb 2015 11:56:14 +0100 Subject: [PATCH] src/nepi/execution/resource.py --- examples/omf/nitos_testbed_bootstrap.py | 16 +++++--- src/nepi/execution/resource.py | 47 +++++++++++++++------- src/nepi/resources/linux/node.py | 6 +-- src/nepi/resources/ns3/ns3netdevice.py | 7 +--- src/nepi/resources/ns3/ns3node.py | 18 ++++----- src/nepi/resources/ns3/ns3wifinetdevice.py | 2 +- 6 files changed, 55 insertions(+), 41 deletions(-) diff --git a/examples/omf/nitos_testbed_bootstrap.py b/examples/omf/nitos_testbed_bootstrap.py index 452114fa..771e1884 100644 --- a/examples/omf/nitos_testbed_bootstrap.py +++ b/examples/omf/nitos_testbed_bootstrap.py @@ -82,7 +82,7 @@ ec.set(reboot_app, "command", reboot_cmd) ec.register_connection(reboot_app, gw_node) ec.register_condition(reboot_app, ResourceAction.START, load_app, - ResourceState.STOPPED, time="300s") + ResourceState.STOPPED, time="60s") hosts = hosts.split(",") @@ -98,11 +98,15 @@ for hostname in hosts: ec.register_condition(node, ResourceAction.DEPLOY, reboot_app, ResourceState.STOPPED, time="300s") - app = ec.register_resource("linux::Application") - ec.set(app, "command", "modprobe ath5k && ip a | grep wlan0 && service omf_rc restart") - ec.register_connection(app, node) - - apps.append(app) + modprobe_app = ec.register_resource("linux::Application") + ec.set(modprobe_app, "command", "modprobe ath5k && ip a | grep wlan0") + ec.register_connection(modprobe_app, node) + apps.append(modprobe_app) + + rc_app = ec.register_resource("linux::Application") + ec.set(rc_app, "command", "service omf_rc stop; service omf_rc start") + ec.register_connection(rc_app, node) + apps.append(rc_app) print "This might take time..." diff --git a/src/nepi/execution/resource.py b/src/nepi/execution/resource.py index 16b434fb..adcb438c 100644 --- a/src/nepi/execution/resource.py +++ b/src/nepi/execution/resource.py @@ -83,7 +83,7 @@ def clsinit(cls): def clsinit_copy(cls): """ Initializes template information (i.e. attributes and traces) - on classes direved from the ResourceManager class. + on classes derived from the ResourceManager class. It differs from the clsinit method in that it forces inheritance of attributes and traces from the parent class. @@ -213,7 +213,7 @@ class ResourceManager(Logger): """ Resource subclasses will invoke this method to register resource traces - This method should be overriden in the RMs that define traces. + This method should be overridden in the RMs that define traces. """ @@ -401,7 +401,7 @@ class ResourceManager(Logger): @property def reserved_time(self): - """ Returns the resreved time of the RM as a timestamp """ + """ Returns the reserved time of the RM as a timestamp """ return self._reserved_time @property @@ -421,7 +421,7 @@ class ResourceManager(Logger): @property def failed_time(self): - """ Returns the time failure occured for the RM as a timestamp """ + """ Returns the time failure occurred for the RM as a timestamp """ return self._failed_time @property @@ -447,7 +447,7 @@ class ResourceManager(Logger): def register_connection(self, guid): """ Registers a connection to the RM identified by guid - This method should not be overriden. Specific functionality + This method should not be overridden. Specific functionality should be added in the do_connect method. :param guid: Global unique identified of the RM to connect to @@ -461,7 +461,7 @@ class ResourceManager(Logger): def unregister_connection(self, guid): """ Removes a registered connection to the RM identified by guid - This method should not be overriden. Specific functionality + This method should not be overridden. Specific functionality should be added in the do_disconnect method. :param guid: Global unique identified of the RM to connect to @@ -479,7 +479,7 @@ class ResourceManager(Logger): This method is responsible for selecting an individual resource matching user requirements. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_discover method. """ @@ -494,7 +494,7 @@ class ResourceManager(Logger): This method is responsible for reserving an individual resource matching user requirements. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_reserved method. """ @@ -510,7 +510,7 @@ class ResourceManager(Logger): After this method has been successfully invoked, the resource should be accessible/controllable by the RM. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_provision method. """ @@ -518,6 +518,22 @@ class ResourceManager(Logger): if self._state != ResourceState.RELEASED: self.do_provision() + @failtrap + def configure(self): + """ Performs resource configuration. + + This method is responsible for configuring one resource. + After this method has been successfully invoked, the resource + should be set up to start the experimentation. + + This method should not be overridden directly. Specific functionality + should be added in the do_configure method. + + """ + with self._release_lock: + if self._state != ResourceState.RELEASED: + self.do_configure() + @failtrap def start(self): """ Starts the RM (e.g. launch remote process). @@ -525,7 +541,7 @@ class ResourceManager(Logger): There is no standard start behavior. Some RMs will not need to perform any actions upon start. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_start method. """ @@ -545,7 +561,7 @@ class ResourceManager(Logger): There is no standard stop behavior. Some RMs will not need to perform any actions upon stop. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_stop method. """ @@ -563,7 +579,7 @@ class ResourceManager(Logger): This method is responsible for deploying the resource (and invoking the discover and provision methods). - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_deploy method. """ @@ -581,7 +597,7 @@ class ResourceManager(Logger): This method is responsible for releasing resources that were used during the experiment by the RM. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_release method. """ @@ -601,7 +617,7 @@ class ResourceManager(Logger): def fail(self): """ Sets the RM to state FAILED. - This method should not be overriden directly. Specific functionality + This method should not be overridden directly. Specific functionality should be added in the do_fail method. """ @@ -1053,6 +1069,9 @@ class ResourceManager(Logger): def do_provision(self): self.set_provisioned() + def do_configure(self): + pass + def do_start(self): self.set_started() diff --git a/src/nepi/resources/linux/node.py b/src/nepi/resources/linux/node.py index 8c5a6c5c..55ce1044 100644 --- a/src/nepi/resources/linux/node.py +++ b/src/nepi/resources/linux/node.py @@ -371,9 +371,9 @@ class LinuxNode(ResourceManager): ip = sshfuncs.gethostbyname(self.get("hostname")) self.set("ip", ip) except: - msg = "Local DNS can not resolve hostname %s" % self.get("hostname") - self.error(msg) - + if self.get("gateway") is None: + msg = "Local DNS can not resolve hostname %s" % self.get("hostname") + self.error(msg) super(LinuxNode, self).do_provision() diff --git a/src/nepi/resources/ns3/ns3netdevice.py b/src/nepi/resources/ns3/ns3netdevice.py index e7c94cf6..9807a6ca 100644 --- a/src/nepi/resources/ns3/ns3netdevice.py +++ b/src/nepi/resources/ns3/ns3netdevice.py @@ -125,12 +125,7 @@ class NS3BaseNetDevice(NS3Base): @property def _rms_to_wait(self): - rms = set() - - node = self.node - rms.add(node) - - rms.add(self.channel) + rms = set([self.node, self.channel]) return rms def _configure_object(self): diff --git a/src/nepi/resources/ns3/ns3node.py b/src/nepi/resources/ns3/ns3node.py index 2d14b856..0e5da2ed 100644 --- a/src/nepi/resources/ns3/ns3node.py +++ b/src/nepi/resources/ns3/ns3node.py @@ -121,20 +121,16 @@ class NS3BaseNode(NS3Base): @property def _rms_to_wait(self): - rms = set() - rms.add(self.simulation) + rms = set([self.simulation]) - ipv4 = self.ipv4 - if ipv4: - rms.add(ipv4) + if self.ipv4: + rms.add(self.ipv4) - arp = self.arp - if arp: - rms.add(arp) + if self.arp: + rms.add(self.arp) - mobility = self.mobility - if mobility: - rms.add(mobility) + if self.mobility: + rms.add(self.mobility) return rms diff --git a/src/nepi/resources/ns3/ns3wifinetdevice.py b/src/nepi/resources/ns3/ns3wifinetdevice.py index 9afa0718..fff65e94 100644 --- a/src/nepi/resources/ns3/ns3wifinetdevice.py +++ b/src/nepi/resources/ns3/ns3wifinetdevice.py @@ -38,7 +38,7 @@ class NS3BaseWifiNetDevice(NS3BaseNetDevice): @property def _rms_to_wait(self): - rms = set([self.node, self.node.ipv4]) + rms = set([self.node]) return rms def _configure_mac_address(self): -- 2.43.0