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=bc94eb00d2af4840a5481fed2f16742783faaee6;hpb=61ba12980c1a7959dfb83943513c8af9d70d0b26;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/tango/llcm.py b/src/emuvim/api/tango/llcm.py index bc94eb0..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 @@ -920,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):