From: peusterm Date: Tue, 19 Dec 2017 14:18:11 +0000 (+0100) Subject: Fix: Better name-handling of Docker-based VNFs X-Git-Tag: v4.0.0~8 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=commitdiff_plain;h=9219060385043e533bf719725f9e6671e98052ce Fix: Better name-handling of Docker-based VNFs There was the risk to run into naming conflicts when a larger number of VNFs was started in the emulation platform. This patch resolves these problems by using short, hash-based names for the emulated VNFs. Change-Id: I958dd469e5494223fe7f1f274bc10e0714b3df90 Signed-off-by: peusterm --- diff --git a/src/emuvim/api/openstack/compute.py b/src/emuvim/api/openstack/compute.py index 175145d..42f0064 100755 --- a/src/emuvim/api/openstack/compute.py +++ b/src/emuvim/api/openstack/compute.py @@ -34,6 +34,7 @@ import threading import uuid import time import ip_handler as IP +import hashlib LOG = logging.getLogger("api.openstack.compute") @@ -561,25 +562,12 @@ class OpenstackCompute(object): Docker does not like too long instance names. This function provides a shorter name if needed """ - # fix for NetSoft'17 demo - # TODO remove this after the demo - #if "http" in name or "apache" in name: - # return "http" - #elif "l4fw" in name or "socat" in name: - # return "l4fw" - #elif "proxy" in name or "squid" in name: - # return "proxy" - # this is a ugly fix, but we cannot do better for now (interface names are to long) if len(name) > char_limit: LOG.info("Long server name: {}".format(name)) # construct a short name - # name = name.strip("-_ .") - # name = name.replace("_vnf", "") - # p = name.split("_") - # if len(p) > 0: - # name = p[len(p)-1] - name = name[-char_limit:].strip("-_ .") - LOG.info("Short server name: {}".format(name)) + h = hashlib.sha224(name).hexdigest() + h = h[0:char_limit] + LOG.info("Short server name: {}".format(h)) return name diff --git a/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py b/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py index 5029417..550f8e7 100755 --- a/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py +++ b/src/emuvim/api/openstack/openstack_dummies/nova_dummy_api.py @@ -223,7 +223,7 @@ class NovaListServersApi(Resource): try: server_dict = json.loads(request.data)['server'] networks = server_dict.get('networks', None) - name = str(self.api.compute.dc.label) + "_man_" + server_dict["name"][0:12] + name = str(self.api.compute.dc.label) + "_" + server_dict["name"] if self.api.compute.find_server_by_name_or_id(name) is not None: return Response("Server with name %s already exists." % name, status=409) @@ -231,7 +231,7 @@ class NovaListServersApi(Resource): resp = dict() server = self.api.compute.create_server(name) - server.full_name = str(self.api.compute.dc.label) + "_man_" + server_dict["name"] + server.full_name = str(self.api.compute.dc.label) + "_" + server_dict["name"] server.template_name = server_dict["name"] if "metadata" in server_dict: server.properties = server_dict["metadata"]