X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fcompute.py;h=d7e944ba4a66b9dfb0a406d81df015ae94a6bf3f;hp=6fc4c1bb82461a1c031c4d08afc22d7d69e958fd;hb=5b8ac4faded6386d8e32751b689876c12800924b;hpb=72f09885db3935e77901c3dee132cb176b927c7b diff --git a/src/emuvim/api/openstack/compute.py b/src/emuvim/api/openstack/compute.py index 6fc4c1b..d7e944b 100755 --- a/src/emuvim/api/openstack/compute.py +++ b/src/emuvim/api/openstack/compute.py @@ -96,8 +96,6 @@ class OpenstackCompute(object): for image in self.dcli.images.list(): if len(image.tags) > 0: for t in image.tags: - # only use short tag names for OSM compatibility - t = t.replace(":latest", "") if t not in self._images: self._images[t] = Image(t) return self._images @@ -490,20 +488,22 @@ class OpenstackCompute(object): 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()) 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() + break # only execute one command def stop_compute(self, server): """ @@ -688,12 +688,6 @@ class OpenstackCompute(object): :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 @@ -709,12 +703,19 @@ class OpenstackCompute(object): :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 = 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): @@ -732,8 +733,7 @@ class OpenstackCompute(object): my_links = self.dc.net.links for link in my_links: - if str(link.intf1) == port.intf_name and \ - str(link.intf1.ip) == port.ip_address.split('/')[0]: + if str(link.intf1) == port.intf_name: self._remove_link(link.intf1.node.name, link) break