X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fomf%2Fapplication.py;h=37d244cdb88619bb3db0df52287022d0ede78645;hb=450b5dd0a993f63eb2ec34bbc656c558572eb44c;hp=0bc0c622ea90c39f6dba73442663eb5397dab6eb;hpb=386498468dfb01f71b0efbbe0c208819f18f82ec;p=nepi.git diff --git a/src/nepi/resources/omf/application.py b/src/nepi/resources/omf/application.py index 0bc0c622..37d244cd 100644 --- a/src/nepi/resources/omf/application.py +++ b/src/nepi/resources/omf/application.py @@ -18,15 +18,15 @@ # Author: Alina Quereilhac # Julien Tribino -from nepi.execution.resource import ResourceManager, clsinit, ResourceState, \ - reschedule_delay +from nepi.execution.resource import ResourceManager, clsinit_copy, \ + ResourceState, reschedule_delay, failtrap from nepi.execution.attribute import Attribute, Flags +from nepi.resources.omf.omf_resource import ResourceGateway, OMFResource from nepi.resources.omf.node import OMFNode from nepi.resources.omf.omf_api import OMFAPIFactory - -@clsinit -class OMFApplication(ResourceManager): +@clsinit_copy +class OMFApplication(OMFResource): """ .. class:: Class Args : @@ -51,24 +51,16 @@ class OMFApplication(ResourceManager): """ Register the attributes of an OMF application """ - appid = Attribute("appid", "Name of the application") path = Attribute("path", "Path of the application") args = Attribute("args", "Argument of the application") env = Attribute("env", "Environnement variable of the application") - xmppSlice = Attribute("xmppSlice","Name of the slice", flags = Flags.Credential) - xmppHost = Attribute("xmppHost", "Xmpp Server",flags = Flags.Credential) - xmppPort = Attribute("xmppPort", "Xmpp Port",flags = Flags.Credential) - xmppPassword = Attribute("xmppPassword", "Xmpp Port",flags = Flags.Credential) + stdin = Attribute("stdin", "Input of the application", default = "") cls._register_attribute(appid) cls._register_attribute(path) cls._register_attribute(args) cls._register_attribute(env) - cls._register_attribute(xmppSlice) - cls._register_attribute(xmppHost) - cls._register_attribute(xmppPort) - cls._register_attribute(xmppPassword) - + cls._register_attribute(stdin) def __init__(self, ec, guid): """ @@ -91,12 +83,26 @@ class OMFApplication(ResourceManager): self._omf_api = None + self.add_set_hook() + + @property + def exp_id(self): + return self.ec.exp_id + @property def node(self): rm_list = self.get_connected(OMFNode.rtype()) if rm_list: return rm_list[0] return None + def stdin_hook(self, old_value, new_value): + self._omf_api.send_stdin(self.node.get('hostname'), new_value, self.get('appid')) + return new_value + + def add_set_hook(self): + attr = self._attrs["stdin"] + attr.set_hook = self.stdin_hook + def valid_connection(self, guid): """ Check if the connection with the guid in parameter is possible. Only meaningful connections are allowed. @@ -130,6 +136,7 @@ class OMFApplication(ResourceManager): return True + @failtrap def deploy(self): """ Deploy the RM. It means nothing special for an application for now (later it will be upload sources, ...) @@ -139,16 +146,16 @@ class OMFApplication(ResourceManager): if not self._omf_api : self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'), self.get('xmppHost'), self.get('xmppPort'), - self.get('xmppPassword'), exp_id = self.ec.exp_id) + self.get('xmppPassword'), exp_id = self.exp_id) if not self._omf_api : msg = "Credentials are not initialzed. XMPP Connections impossible" self.error(msg) - self.fail() - return + raise RuntimeError, msg super(OMFApplication, self).deploy() + @failtrap def start(self): """ Start the RM. It means : Send Xmpp Message Using OMF protocol to execute the application. @@ -158,8 +165,7 @@ class OMFApplication(ResourceManager): if not (self.get('appid') and self.get('path')) : msg = "Application's information are not initialized" self.error(msg) - self.fail() - return + raise RuntimeError, msg if not self.get('args'): self.set('args', " ") @@ -178,11 +184,11 @@ class OMFApplication(ResourceManager): except AttributeError: msg = "Credentials are not initialzed. XMPP Connections impossible" self.error(msg) - self.fail() raise super(OMFApplication, self).start() + @failtrap def stop(self): """ Stop the RM. It means : Send Xmpp Message Using OMF protocol to kill the application. @@ -194,19 +200,24 @@ class OMFApplication(ResourceManager): except AttributeError: msg = "Credentials were not initialzed. XMPP Connections impossible" self.error(msg) - self.fail() - return + raise super(OMFApplication, self).stop() + self.set_finished() def release(self): """ Clean the RM at the end of the experiment and release the API. """ - if self._omf_api : - OMFAPIFactory.release_api(self.get('xmppSlice'), - self.get('xmppHost'), self.get('xmppPort'), - self.get('xmppPassword'), exp_id = self.ec.exp_id) + try: + if self._omf_api : + OMFAPIFactory.release_api(self.get('xmppSlice'), + self.get('xmppHost'), self.get('xmppPort'), + self.get('xmppPassword'), exp_id = self.exp_id) + except: + import traceback + err = traceback.format_exc() + self.error(err) super(OMFApplication, self).release()