# 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
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)
intf.setMAC(port.mac_address)
else:
port.mac_address = intf.MAC()
+ 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):
"""
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):
"""
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
:return: Returns the created port.
:rtype: :class:`heat.resources.port`
"""
- port = self.find_port_by_name_or_id(name)
- if port is not None and not stack_operation:
- LOG.warning(
- "Creating port with name %s failed, as it already exists" % name)
- raise Exception("Port with name %s already exists." % name)
- LOG.debug("Creating port with name %s" % name)
port = Port(name)
if not stack_operation:
self.ports[port.id] = port
:return: Returns the port reference if it was found or None
:rtype: :class:`heat.resources.port`
"""
+ # find by id
if name_or_id in self.ports:
return self.ports[name_or_id]
- for port in self.ports.values():
- if port.name == name_or_id or port.template_name == name_or_id:
- return port
-
+ # find by name
+ 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]
+ if matching_ports_count > 1:
+ raise RuntimeError("Ambiguous port name %s" % name_or_id)
return None
def delete_port(self, name_or_id):