X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fdcemulator%2Fnet.py;h=8b2c445eea55f0edeaaf3656b87b437df7c12176;hb=a4689bc8610b8ad826024c69b4b9bbe423626fa6;hp=6be973fb42374f113aa929754deb8ca1a437f5b3;hpb=4c50ae39537f45285e3463e93fd0221135c1b109;p=osm%2Fvim-emu.git diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py index 6be973f..8b2c445 100755 --- a/src/emuvim/dcemulator/net.py +++ b/src/emuvim/dcemulator/net.py @@ -24,24 +24,27 @@ # acknowledge the contributions of their colleagues of the SONATA # partner consortium (www.sonata-nfv.eu). import logging - import time -from subprocess import Popen import re import requests import os import json - +import networkx as nx +from subprocess import Popen +# from gevent import monkey from mininet.net import Containernet from mininet.node import OVSSwitch, OVSKernelSwitch, Docker, RemoteController from mininet.cli import CLI from mininet.link import TCLink from mininet.clean import cleanup -import networkx as nx from emuvim.dcemulator.monitoring import DCNetworkMonitor 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() + +# setup logging LOG = logging.getLogger("dcemulator.net") LOG.setLevel(logging.DEBUG) @@ -382,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): """ @@ -934,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'])