X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fomf%2Fnode.py;h=c0e10f912621bfcb81ff683d2dc5e63bf7a6cd8f;hb=f025a30a215310a9803067a25e244137b71f56f2;hp=de00a07e77b4c2323460d0ed1ed3547f866f26c3;hpb=82dfe2319f69a9966e05ecc880cf6a88d18b9f6d;p=nepi.git diff --git a/src/nepi/resources/omf/node.py b/src/nepi/resources/omf/node.py index de00a07e..c0e10f91 100644 --- a/src/nepi/resources/omf/node.py +++ b/src/nepi/resources/omf/node.py @@ -22,10 +22,13 @@ from nepi.execution.resource import ResourceManager, clsinit_copy, \ ResourceState, reschedule_delay from nepi.execution.attribute import Attribute, Flags from nepi.resources.omf.omf_resource import ResourceGateway, OMFResource -from nepi.resources.omf.omf_api import OMFAPIFactory +from nepi.resources.omf.omf_api_factory import OMFAPIFactory import time +reschedule_check = "0.3s" +confirmation_counter = 300 + @clsinit_copy class OMFNode(OMFResource): """ @@ -83,51 +86,81 @@ class OMFNode(OMFResource): msg = "Connection between %s %s and %s %s accepted" % ( self.get_rtype(), self._guid, rm.get_rtype(), guid) self.debug(msg) - return True msg = "Connection between %s %s and %s %s refused" % ( self.get_rtype(), self._guid, rm.get_rtype(), guid) - self.debug(msg) + self.error(msg) return False def do_deploy(self): """ Deploy the RM. It means : Send Xmpp Message Using OMF protocol to enroll the node into the experiment. - It becomes DEPLOYED after sending messages to enroll the node """ - if not (self.get('xmppSlice') and self.get('xmppHost') - and self.get('xmppPort') and self.get('xmppPassword')): - msg = "Credentials are not initialzed. XMPP Connections impossible" + if not self.get('xmppServer'): + msg = "XmppServer is not initialzed. XMPP Connections impossible" + self.error(msg) + raise RuntimeError, msg + + if not self.get('version'): + msg = "Version of OMF is not indicated" self.error(msg) raise RuntimeError, msg + if not (self.get('xmppUser') or self.get('xmppPort') + or self.get('xmppPassword')): + msg = "Credentials are not all initialzed. Default values will be used" + self.warn(msg) + 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.exp_id) + self._omf_api = OMFAPIFactory.get_api(self.get('version'), + self.get('xmppServer'), self.get('xmppUser'), self.get('xmppPort'), + self.get('xmppPassword'), exp_id = self.exp_id) if not self.get('hostname') : msg = "Hostname's value is not initialized" self.error(msg) raise RuntimeError, msg - self._omf_api.enroll_host(self.get('hostname')) + if self.get('version') == "5": + self._omf_api.enroll_host(self.get('hostname')) + else: + self._omf_api.enroll_topic(self.get('hostname')) super(OMFNode, self).do_deploy() def do_release(self): - """ Clean the RM at the end of the experiment + """ Clean the RM at the end of the experiment by unenrolling + the node from the topic """ - if self._omf_api: - self._omf_api.release(self.get('hostname')) + from nepi.resources.omf.application import OMFApplication + rm_list = self.get_connected(OMFApplication.get_rtype()) + if rm_list: + for rm in rm_list: + if rm.state < ResourceState.RELEASED: + self.ec.schedule(reschedule_delay, self.release) + return + + from nepi.resources.omf.interface import OMFWifiInterface + rm_list = self.get_connected(OMFWifiInterface.get_rtype()) + if rm_list: + for rm in rm_list: + if rm.state < ResourceState.RELEASED: + self.ec.schedule(reschedule_delay, self.release) + return - OMFAPIFactory.release_api(self.get('xmppSlice'), - self.get('xmppHost'), self.get('xmppPort'), - self.get('xmppPassword'), exp_id = self.exp_id) + if self._omf_api: + if self.get('version') == "5": + self._omf_api.release(self.get('hostname')) + else: + self._omf_api.unenroll_topic(self.get('hostname')) + + OMFAPIFactory.release_api(self.get('version'), + self.get('xmppServer'), self.get('xmppUser'), self.get('xmppPort'), + self.get('xmppPassword'), exp_id = self.exp_id) super(OMFNode, self).do_release()