X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Femuvim%2Fapi%2Ftango%2Fllcm.py;h=b3916bb74afc84151d081e899fa47eeecee74d94;hb=7da82501c1a53a2523c3eaf4a11fc11764e8b231;hp=d7c24dd10416c8b5b30b533f36a9549a2d7b6ea7;hpb=17008d0f9109faae34dd2e85cc7d481ffea57406;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/tango/llcm.py b/src/emuvim/api/tango/llcm.py index d7c24dd..b3916bb 100755 --- a/src/emuvim/api/tango/llcm.py +++ b/src/emuvim/api/tango/llcm.py @@ -240,27 +240,33 @@ class Service(object): Extract resource limits from deployment units. """ # defaults - cpu_list = "1" + cpu_list = None cpu_period, cpu_quota = self._calculate_cpu_cfs_values(float(1.0)) - mem_limit = 0 + mem_limit = None # update from descriptor if "resource_requirements" in deployment_unit: res_req = deployment_unit.get("resource_requirements") - cpu_list = res_req.get("cpu").get("cores") + cpu_list = res_req.get("cpu").get("cpuset") if cpu_list is None: cpu_list = res_req.get("cpu").get("vcpus") - cpu_bw = res_req.get("cpu").get("cpu_bw", 1.0) + if cpu_list is not None: + # attention: docker expects list as string w/o spaces: + cpu_list = str(cpu_list).replace(" ", "").strip() + cpu_bw = res_req.get("cpu").get("cpu_bw") + if cpu_bw is None: + cpu_bw = 1.0 cpu_period, cpu_quota = self._calculate_cpu_cfs_values(float(cpu_bw)) - mem_num = str(res_req.get("memory").get("size", 2)) + mem_limit = res_req.get("memory").get("size") mem_unit = str(res_req.get("memory").get("size_unit", "GB")) - mem_limit = float(mem_num) - if mem_unit == "GB": - mem_limit = mem_limit * 1024 * 1024 * 1024 - elif mem_unit == "MB": - mem_limit = mem_limit * 1024 * 1024 - elif mem_unit == "KB": - mem_limit = mem_limit * 1024 - mem_limit = int(mem_limit) + if mem_limit is not None: + mem_limit = int(mem_limit) + # to bytes + if "G" in mem_unit: + mem_limit = mem_limit * 1024 * 1024 * 1024 + elif "M" in mem_unit: + mem_limit = mem_limit * 1024 * 1024 + elif "K" in mem_unit: + mem_limit = mem_limit * 1024 return cpu_list, cpu_period, cpu_quota, mem_limit def _start_vnfd(self, vnfd, vnf_id, **kwargs): @@ -329,7 +335,7 @@ class Service(object): image=docker_image_name, cpu_quota=cpu_quota, cpu_period=cpu_period, - cpuset=cpu_list, + cpuset_cpus=cpu_list, mem_limit=mem_limit, volumes=volumes, properties=cenv, # environment @@ -883,7 +889,15 @@ class Instantiations(fr.Resource): # try to extract the service uuid from the request json_data = request.get_json(force=True) service_uuid = json_data.get("service_uuid") - + service_name = json_data.get("service_name") + + # first try to find by service_name + if service_name is not None: + for s_uuid, s in GK.services.iteritems(): + if s.manifest.get("name") == service_name: + LOG.info("Found service: {} with UUID: {}" + .format(service_name, s_uuid)) + service_uuid = s_uuid # lets be a bit fuzzy here to make testing easier if (service_uuid is None or service_uuid == "latest") and len(GK.services) > 0: @@ -912,24 +926,32 @@ class Instantiations(fr.Resource): """ # try to extract the service and instance UUID from the request json_data = request.get_json(force=True) - service_uuid = json_data.get("service_uuid") - instance_uuid = json_data.get("service_instance_uuid") - + service_uuid_input = json_data.get("service_uuid") + instance_uuid_input = json_data.get("service_instance_uuid") + if len(GK.services) < 1: + return "No service on-boarded.", 404 # try to be fuzzy - if service_uuid is None and len(GK.services) > 0: - # if we don't get a service uuid, we simply stop the last service - # in the list - service_uuid = list(GK.services.iterkeys())[0] - if instance_uuid is None and len( - GK.services[service_uuid].instances) > 0: - instance_uuid = list( - GK.services[service_uuid].instances.iterkeys())[0] - - if service_uuid in GK.services and instance_uuid in GK.services[service_uuid].instances: - # valid service and instance UUID, stop service - GK.services.get(service_uuid).stop_service(instance_uuid) - return "service instance with uuid %r stopped." % instance_uuid, 200 - return "Service not found", 404 + if service_uuid_input is None: + # if we don't get a service uuid we stop all services + service_uuid_list = list(GK.services.iterkeys()) + LOG.info("No service_uuid given, stopping all.") + else: + service_uuid_list = [service_uuid_input] + # for each service + for service_uuid in service_uuid_list: + if instance_uuid_input is None: + instance_uuid_list = list( + GK.services[service_uuid].instances.iterkeys()) + else: + instance_uuid_list = [instance_uuid_input] + # for all service instances + for instance_uuid in instance_uuid_list: + if (service_uuid in GK.services and + instance_uuid in GK.services[service_uuid].instances): + # valid service and instance UUID, stop service + GK.services.get(service_uuid).stop_service(instance_uuid) + LOG.info("Service instance with uuid %r stopped." % instance_uuid) + return "Service(s) stopped.", 200 class Exit(fr.Resource):