Adding gateway attr and modify CleanProcess
[nepi.git] / src / nepi / resources / omf / interface.py
index 0aea5bb..cd2fb9d 100644 (file)
@@ -18,8 +18,8 @@
 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
 #         Julien Tribino <julien.tribino@inria.fr>
 
 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
 #         Julien Tribino <julien.tribino@inria.fr>
 
-from nepi.execution.resource import ResourceManager, clsinit_copy, ResourceState, \
-        reschedule_delay
+from nepi.execution.resource import ResourceManager, clsinit_copy, \
+        ResourceState, reschedule_delay
 from nepi.execution.attribute import Attribute, Flags 
 
 from nepi.resources.omf.node import OMFNode
 from nepi.execution.attribute import Attribute, Flags 
 
 from nepi.resources.omf.node import OMFNode
@@ -78,6 +78,8 @@ class OMFWifiInterface(OMFResource):
         """
         super(OMFWifiInterface, self).__init__(ec, guid)
 
         """
         super(OMFWifiInterface, self).__init__(ec, guid)
 
+        self._conf = False
+
         self._omf_api = None
         self._alias = self.get('alias')
 
         self._omf_api = None
         self._alias = self.get('alias')
 
@@ -91,38 +93,35 @@ class OMFWifiInterface(OMFResource):
 
         """
         rm = self.ec.get_resource(guid)
 
         """
         rm = self.ec.get_resource(guid)
-        if rm.rtype() in self._authorized_connections:
+        if rm.get_rtype() in self._authorized_connections:
             msg = "Connection between %s %s and %s %s accepted" % \
             msg = "Connection between %s %s and %s %s accepted" % \
-                (self.rtype(), self._guid, rm.rtype(), guid)
+                (self.get_rtype(), self._guid, rm.get_rtype(), guid)
             self.debug(msg)
 
             return True
 
         msg = "Connection between %s %s and %s %s refused" % \
             self.debug(msg)
 
             return True
 
         msg = "Connection between %s %s and %s %s refused" % \
-             (self.rtype(), self._guid, rm.rtype(), guid)
+             (self.get_rtype(), self._guid, rm.get_rtype(), guid)
         self.debug(msg)
 
         return False
 
     @property
     def exp_id(self):
         self.debug(msg)
 
         return False
 
     @property
     def exp_id(self):
-        if self.ec.exp_id.startswith('exp-'):
-            return None
         return self.ec.exp_id
 
     @property
     def node(self):
         return self.ec.exp_id
 
     @property
     def node(self):
-        rm_list = self.get_connected(OMFNode.rtype())
+        rm_list = self.get_connected(OMFNode.get_rtype())
         if rm_list: return rm_list[0]
         return None
 
     @property
     def channel(self):
         if rm_list: return rm_list[0]
         return None
 
     @property
     def channel(self):
-        rm_list = self.get_connected(OMFChannel.rtype())
+        rm_list = self.get_connected(OMFChannel.get_rtype())
         if rm_list: return rm_list[0]
         return None
 
         if rm_list: return rm_list[0]
         return None
 
-
     def configure_iface(self):
         """ Configure the interface without the ip
 
     def configure_iface(self):
         """ Configure the interface without the ip
 
@@ -131,19 +130,13 @@ class OMFWifiInterface(OMFResource):
             self.ec.schedule(reschedule_delay, self.deploy)
             return False
 
             self.ec.schedule(reschedule_delay, self.deploy)
             return False
 
-        try :
-            for attrname in ["mode", "type", "essid"]:
-                attrval = self.get(attrname)
-                attrname = "net/%s/%s" % (self._alias, attrname)
-                self._omf_api.configure(self.node.get('hostname'), attrname, 
+        for attrname in ["mode", "type", "essid"]:
+            attrval = self.get(attrname)
+            attrname = "net/%s/%s" % (self._alias, attrname)
+            self._omf_api.configure(self.node.get('hostname'), attrname, 
                         attrval)
                         attrval)
-        except AttributeError:
-            self._state = ResourceState.FAILED
-            msg = "Credentials are not initialzed. XMPP Connections impossible"
-            self.debug(msg)
-            #raise
         
         
-        super(OMFWifiInterface, self).provision()
+        super(OMFWifiInterface, self).do_provision()
         return True
 
     def configure_ip(self):
         return True
 
     def configure_ip(self):
@@ -154,74 +147,67 @@ class OMFWifiInterface(OMFResource):
             self.ec.schedule(reschedule_delay, self.deploy)
             return False
 
             self.ec.schedule(reschedule_delay, self.deploy)
             return False
 
-        try :
-            attrval = self.get("ip")
-            attrname = "net/%s/%s" % (self._alias, "ip")
-            self._omf_api.configure(self.node.get('hostname'), attrname, 
+        attrval = self.get("ip")
+        attrname = "net/%s/%s" % (self._alias, "ip")
+        self._omf_api.configure(self.node.get('hostname'), attrname, 
                     attrval)
                     attrval)
-        except AttributeError:
-            msg = "Credentials are not initialzed. XMPP Connections impossible"
-            self.debug(msg)
-            self.fail()
-            #raise
 
         return True
 
 
         return True
 
-    def deploy(self):
+    def do_deploy(self):
         """ Deploy the RM. It means : Get the xmpp client and send messages 
         using OMF 5.4 protocol to configure the interface.
         It becomes DEPLOYED after sending messages to configure the interface
         """
         """ Deploy the RM. It means : Get the xmpp client and send messages 
         using OMF 5.4 protocol to configure the interface.
         It becomes DEPLOYED after sending messages to configure the interface
         """
+        self.set('xmppSlice',self.node.get('xmppSlice'))
+        self.set('xmppHost',self.node.get('xmppHost'))
+        self.set('xmppPort',self.node.get('xmppPort'))
+        self.set('xmppPassword',self.node.get('xmppPassword'))
+
+        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"
+            self.error(msg)
+            raise RuntimeError, 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)
 
         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)
 
-        if not self._omf_api :
-            msg = "Credentials are not initialzed. XMPP Connections impossible"
-            self.error(msg)
-            self.fail()
-            return
-
         if not (self.get('mode') and self.get('type') and self.get('essid') \
                 and self.get('ip')):
             msg = "Interface's variable are not initialized"
             self.error(msg)
         if not (self.get('mode') and self.get('type') and self.get('essid') \
                 and self.get('ip')):
             msg = "Interface's variable are not initialized"
             self.error(msg)
-            self.fail()
-            return False
+            raise RuntimeError, msg
 
         if not self.node.get('hostname') :
             msg = "The channel is connected with an undefined node"
             self.error(msg)
 
         if not self.node.get('hostname') :
             msg = "The channel is connected with an undefined node"
             self.error(msg)
-            self.fail()
-            return False
+            raise RuntimeError, msg
 
         # Just for information
 
         # Just for information
-        self.debug(" " + self.rtype() + " ( Guid : " + str(self._guid) +") : " + \
+        self.debug(" " + self.get_rtype() + " ( Guid : " + str(self._guid) +") : " + \
             self.get('mode') + " : " + self.get('type') + " : " + \
             self.get('essid') + " : " + self.get('ip'))
     
         # Check if the node is already deployed
             self.get('mode') + " : " + self.get('type') + " : " + \
             self.get('essid') + " : " + self.get('ip'))
     
         # Check if the node is already deployed
-        chk1 = True
         if self.state < ResourceState.PROVISIONED:
         if self.state < ResourceState.PROVISIONED:
-            chk1 = self.configure_iface()
-        if chk1:
-            chk2 = self.configure_ip()
+            if self._conf == False:
+                self._conf = self.configure_iface()
+        if self._conf == True:
+            self.configure_ip()
 
 
-        if not (chk1 and chk2) :
-            return False
-            
-        super(OMFWifiInterface, self).deploy()
-        return True
+        super(OMFWifiInterface, self).do_deploy()
 
 
-    def release(self):
+    def do_release(self):
         """ Clean the RM at the end of the experiment and release the API
 
         """
         """ Clean the RM at the end of the experiment and release the API
 
         """
-        if self._omf_api :
+        if self._omf_api:
             OMFAPIFactory.release_api(self.get('xmppSlice'), 
                 self.get('xmppHost'), self.get('xmppPort'), 
                 self.get('xmppPassword'), exp_id = self.exp_id)
 
             OMFAPIFactory.release_api(self.get('xmppSlice'), 
                 self.get('xmppHost'), self.get('xmppPort'), 
                 self.get('xmppPassword'), exp_id = self.exp_id)
 
-        super(OMFWifiInterface, self).release()
+        super(OMFWifiInterface, self).do_release()