def allowed_instances(context, requested_instances, instance_type): """Check quota and return min(requested_instances, allowed_instances).""" project_id = context.project_id context = context.elevated() requested_cores = requested_instances * instance_type['vcpus'] requested_ram = requested_instances * instance_type['memory_mb'] usage = db.instance_data_get_for_project(context, project_id) used_instances, used_cores, used_ram = usage quota = get_project_quotas(context, project_id) allowed_instances = _get_request_allotment(requested_instances, used_instances, quota['instances']) allowed_cores = _get_request_allotment(requested_cores, used_cores, quota['cores']) allowed_ram = _get_request_allotment(requested_ram, used_ram, quota['ram']) if instance_type['vcpus']: allowed_instances = min(allowed_instances, allowed_cores // instance_type['vcpus']) if instance_type['memory_mb']: allowed_instances = min(allowed_instances, allowed_ram // instance_type['memory_mb']) return min(requested_instances, allowed_instances)
def _sync_instances(context, project_id, session): return dict(zip(('instances', 'cores', 'ram'), db.instance_data_get_for_project( context, project_id, session=session)))
def _sync_instances(context, project_id, session): return dict( zip(('instances', 'cores', 'ram'), db.instance_data_get_for_project(context, project_id, session=session)))