Fix: Make vim-emu ready for the upcoming Containernet release
[osm/vim-emu.git] / src / emuvim / dcemulator / net.py
index 64c173b..8b2c445 100755 (executable)
@@ -31,7 +31,7 @@ import os
 import json
 import networkx as nx
 from subprocess import Popen
-from gevent import monkey
+from gevent import monkey
 from mininet.net import Containernet
 from mininet.node import OVSSwitch, OVSKernelSwitch, Docker, RemoteController
 from mininet.cli import CLI
@@ -42,7 +42,7 @@ from emuvim.dcemulator.node import Datacenter, EmulatorCompute
 from emuvim.dcemulator.resourcemodel import ResourceModelRegistrar
 
 # ensure correct functionality of all gevent based REST servers
-monkey.patch_all()
+monkey.patch_all()
 
 # setup logging
 LOG = logging.getLogger("dcemulator.net")
@@ -385,6 +385,18 @@ class DCNetwork(Containernet):
             switch_node = self.getNodeByName(src_sw)
             self._set_vlan_tag(switch_node, src_sw_inport_name, vlan)
 
+    def getNodeByName(self, name):
+        """
+        Wraps Containernet's getNodeByName method to avoid
+        key not found exceptions.
+        """
+        try:
+            return super(DCNetwork, self).getNodeByName(name)
+        except BaseException as ex:
+            LOG.warning("Node not found: {}".format(name))
+            LOG.debug("Node not found: {}".format(ex))
+        return None
+
     def _addMonitorFlow(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None,
                         tag=None, **kwargs):
         """
@@ -937,9 +949,12 @@ class DCNetwork(Containernet):
         :return:
         """
         # try it nicely
-        if self.ryu_process is not None:
-            self.ryu_process.terminate()
-            self.ryu_process.kill()
+        try:
+            if self.ryu_process is not None:
+                self.ryu_process.terminate()
+                self.ryu_process.kill()
+        except BaseException as ex:
+            LOG.warning("Error during Ryu stop: {}".format(ex))
         # ensure its death ;-)
         Popen(['pkill', '-f', 'ryu-manager'])