X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fcompute.py;h=49993315717d44aca8c2b30359d9f8039a550798;hp=4d6517ec8dd62c679c8e0f4b054e41ce3c84a725;hb=aa8823c85d94a4fa72de058076195296334cdb91;hpb=0e10819e9f46c6d00c2e54e544c8df4a2f1ce9a2 diff --git a/src/emuvim/api/openstack/compute.py b/src/emuvim/api/openstack/compute.py index 4d6517e..4999331 100755 --- a/src/emuvim/api/openstack/compute.py +++ b/src/emuvim/api/openstack/compute.py @@ -25,22 +25,22 @@ # partner consortium (www.sonata-nfv.eu). from mininet.link import Link -from resources.instance_flavor import InstanceFlavor -from resources.net import Net -from resources.port import Port -from resources.port_pair import PortPair -from resources.port_pair_group import PortPairGroup -from resources.flow_classifier import FlowClassifier -from resources.port_chain import PortChain -from resources.server import Server -from resources.image import Image +from emuvim.api.openstack.resources.instance_flavor import InstanceFlavor +from emuvim.api.openstack.resources.net import Net +from emuvim.api.openstack.resources.port import Port +from emuvim.api.openstack.resources.port_pair import PortPair +from emuvim.api.openstack.resources.port_pair_group import PortPairGroup +from emuvim.api.openstack.resources.flow_classifier import FlowClassifier +from emuvim.api.openstack.resources.port_chain import PortChain +from emuvim.api.openstack.resources.server import Server +from emuvim.api.openstack.resources.image import Image from docker import DockerClient import logging import threading import uuid import time -import ip_handler as IP +import emuvim.api.openstack.ip_handler as IP import hashlib @@ -232,8 +232,12 @@ class OpenstackCompute(object): for server in self.stacks[stack_id].servers.values(): self.stop_compute(server) self.delete_server(server) - for net in self.stacks[stack_id].nets.values(): - self.delete_network(net.id) + stack = list(self.stacks[stack_id].nets.values()) + while stack: + id = stack.pop().id + self.delete_network(id) + # for net in self.stacks[stack_id].nets.values(): + # self.delete_network(net.id) for port in self.stacks[stack_id].ports.values(): self.delete_port(port.id) @@ -491,18 +495,23 @@ class OpenstackCompute(object): port.assigned_container = c # Start the real emulator command now as specified in the dockerfile - # ENV SON_EMU_CMD config = c.dcinfo.get("Config", dict()) env = config.get("Env", list()) + legacy_command_execution = False for env_var in env: - if "SON_EMU_CMD=" in env_var: - cmd = str(env_var.split("=")[1]) - server.son_emu_command = cmd + var, cmd = map(str.strip, map(str, env_var.split('=', 1))) + if var == "SON_EMU_CMD" or var == "VIM_EMU_CMD": + LOG.info("Executing script in '{}': {}={}" + .format(server.name, var, cmd)) # execute command in new thread to ensure that GK is not # blocked by VNF t = threading.Thread(target=c.cmdPrint, args=(cmd,)) t.daemon = True t.start() + legacy_command_execution = True + break # only execute one command + if not legacy_command_execution: + c.start() def stop_compute(self, server): """ @@ -586,11 +595,10 @@ class OpenstackCompute(object): This function provides a shorter name if needed """ if len(name) > char_limit: - LOG.info("Long server name: {}".format(name)) # construct a short name - h = hashlib.sha224(name).hexdigest() + h = hashlib.sha224(name.encode()).hexdigest() h = h[0:char_limit] - LOG.info("Short server name: {}".format(h)) + LOG.debug("Shortened server name '%s' to '%s'" % (name, h)) return name def delete_server(self, server): @@ -626,6 +634,7 @@ class OpenstackCompute(object): """ if name_or_id in self.nets: return self.nets[name_or_id] + print("name_or_id: ", name_or_id) for net in self.nets.values(): if net.name == name_or_id: return net @@ -706,10 +715,10 @@ class OpenstackCompute(object): if name_or_id in self.ports: return self.ports[name_or_id] # find by name - matching_ports = filter( + matching_ports = list(filter( lambda port: port.name == name_or_id or port.template_name == name_or_id, self.ports.values() - ) + )) matching_ports_count = len(matching_ports) if matching_ports_count == 1: return matching_ports[0]