diff options
Diffstat (limited to 'newton')
-rw-r--r-- | newton/newton/resource/views/capacity.py | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/newton/newton/resource/views/capacity.py b/newton/newton/resource/views/capacity.py index 8ea37062..973bc980 100644 --- a/newton/newton/resource/views/capacity.py +++ b/newton/newton/resource/views/capacity.py @@ -61,12 +61,28 @@ class CapacityCheck(APIView): resp = sess.get(req_resouce, endpoint_filter=service) content = resp.json() compute_limits = content['limits']['absolute'] - + #get total resource of this cloud region - req_resouce = "/os-hypervisors/statistics" - resp = sess.get(req_resouce, endpoint_filter=service) - content = resp.json() - hypervisor_statistics = content['hypervisor_statistics'] + try: + req_resouce = "/os-hypervisors/statistics" + self._logger.info("check os-hypervisors statistics> URI:%s" % req_resouce) + resp = sess.get(req_resouce, endpoint_filter=service) + self._logger.info("check os-hypervisors statistics> status:%s" % resp.status_code) + content = resp.json() + hypervisor_statistics = content['hypervisor_statistics'] + self._logger.debug("check os-hypervisors statistics> resp data:%s" % content) + except HttpError as e: + if e.http_status == status.HTTP_403_FORBIDDEN: + # Due to non administrator account cannot get hypervisor data, + # so construct enough resource data + conVCPUS = int(resource_demand['vCPU']) + conFreeRamMB = int(resource_demand['Memory']) + conFreeDiskGB = int(resource_demand['Storage']) + self._logger.info("Non administator forbidden to access hypervisor statistics data") + hypervisor_statistics = {'vcpus_used':0, 'vcpus':conVCPUS, 'free_ram_mb':conFreeRamMB, 'free_disk_gb':conFreeDiskGB} + else: + # non forbiden exeption will be redirected + raise e #get storage limit for this tenant service['service_type'] = 'volumev2' @@ -93,11 +109,11 @@ class CapacityCheck(APIView): remainStorage = remainHypervisorStorage # compare resource demanded with available - if (int(resource_demand['vCPU']) >= remainVCPU): + if (int(resource_demand['vCPU']) > remainVCPU): hasEnoughResource = False - elif (int(resource_demand['Memory']) >= remainMEM): + elif (int(resource_demand['Memory']) > remainMEM): hasEnoughResource = False - elif (int(resource_demand['Storage']) >= remainStorage): + elif (int(resource_demand['Storage']) > remainStorage): hasEnoughResource = False else: hasEnoughResource = True |