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):
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
"""
# 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):