def get_all_types(context, inactive=0, search_opts={}): """Get all non-deleted volume_types. Pass true as argument if you want deleted volume types returned also. """ vol_types = db.volume_type_get_all(context, inactive) if search_opts: LOG.debug("Searching by: %s" % search_opts) def _check_extra_specs_match(vol_type, searchdict): for k, v in searchdict.iteritems(): if k not in vol_type["extra_specs"].keys() or vol_type["extra_specs"][k] != v: return False return True # search_option to filter_name mapping. filter_mapping = {"extra_specs": _check_extra_specs_match} result = {} for type_name, type_args in vol_types.iteritems(): # go over all filters in the list for opt, values in search_opts.iteritems(): try: filter_func = filter_mapping[opt] except KeyError: # no such filter - ignore it, go to next filter continue else: if filter_func(type_args, values): result[type_name] = type_args break vol_types = result return vol_types
def get_all_types( context, inactive=0, filters=None, marker=None, limit=None, sort_keys=None, sort_dirs=None, offset=None, list_result=False, ): """Get all non-deleted volume_types. Pass true as argument if you want deleted volume types returned also. """ vol_types = db.volume_type_get_all( context, inactive, filters=filters, marker=marker, limit=limit, sort_keys=sort_keys, sort_dirs=sort_dirs, offset=offset, list_result=list_result, ) return vol_types
def make_body(root=True, gigabytes=1000, snapshots=10, volumes=10, backups=10, backup_gigabytes=1000, per_volume_gigabytes=-1, volume_types_faked=None, tenant_id=fake.PROJECT_ID, groups=10): resources = {'gigabytes': gigabytes, 'snapshots': snapshots, 'volumes': volumes, 'backups': backups, 'per_volume_gigabytes': per_volume_gigabytes, 'backup_gigabytes': backup_gigabytes, 'groups': groups} if not volume_types_faked: volume_types_faked = {'fake_type': None} for volume_type in volume_types_faked: resources['gigabytes_' + volume_type] = -1 resources['snapshots_' + volume_type] = -1 resources['volumes_' + volume_type] = -1 # need to consider preexisting volume types as well volume_types = db.volume_type_get_all(context.get_admin_context()) for volume_type in volume_types: resources['gigabytes_' + volume_type] = -1 resources['snapshots_' + volume_type] = -1 resources['volumes_' + volume_type] = -1 if tenant_id: resources['id'] = tenant_id if root: result = {'quota_class_set': resources} else: result = resources return result
def make_body(root=True, gigabytes=1000, snapshots=10, volumes=10, backups=10, backup_gigabytes=1000, tenant_id='foo', per_volume_gigabytes=-1): resources = { 'gigabytes': gigabytes, 'snapshots': snapshots, 'volumes': volumes, 'backups': backups, 'backup_gigabytes': backup_gigabytes, 'per_volume_gigabytes': per_volume_gigabytes, } # need to consider preexisting volume types as well volume_types = db.volume_type_get_all(context.get_admin_context()) for volume_type in volume_types: resources['gigabytes_' + volume_type] = -1 resources['snapshots_' + volume_type] = -1 resources['volumes_' + volume_type] = -1 if tenant_id: resources['id'] = tenant_id if root: result = {'quota_set': resources} else: result = resources return result
def make_body(root=True, gigabytes=1000, snapshots=10, volumes=10, backups=10, backup_gigabytes=1000, tenant_id=fake.PROJECT_ID, per_volume_gigabytes=-1, groups=10): resources = {'gigabytes': gigabytes, 'snapshots': snapshots, 'volumes': volumes, 'backups': backups, 'backup_gigabytes': backup_gigabytes, 'per_volume_gigabytes': per_volume_gigabytes, 'groups': groups} # need to consider preexisting volume types as well volume_types = db.volume_type_get_all(context.get_admin_context()) for volume_type in volume_types: resources['gigabytes_' + volume_type] = -1 resources['snapshots_' + volume_type] = -1 resources['volumes_' + volume_type] = -1 if tenant_id: resources['id'] = tenant_id if root: result = {'quota_set': resources} else: result = resources return result
def make_body( root=True, gigabytes=1000, snapshots=10, volumes=10, backups=10, backup_gigabytes=1000, tenant_id=fake.PROJECT_ID, per_volume_gigabytes=-1, ): resources = { "gigabytes": gigabytes, "snapshots": snapshots, "volumes": volumes, "backups": backups, "backup_gigabytes": backup_gigabytes, "per_volume_gigabytes": per_volume_gigabytes, } # need to consider preexisting volume types as well volume_types = db.volume_type_get_all(context.get_admin_context()) for volume_type in volume_types: resources["gigabytes_" + volume_type] = -1 resources["snapshots_" + volume_type] = -1 resources["volumes_" + volume_type] = -1 if tenant_id: resources["id"] = tenant_id if root: result = {"quota_set": resources} else: result = resources return result
def make_body(root=True, gigabytes=1000, snapshots=10, volumes=10, backups=10, backup_gigabytes=1000, tenant_id=fake.PROJECT_ID, per_volume_gigabytes=-1, groups=10, subproject=False): resources = {'gigabytes': gigabytes, 'snapshots': snapshots, 'volumes': volumes, 'backups': backups, 'backup_gigabytes': backup_gigabytes, 'per_volume_gigabytes': per_volume_gigabytes, 'groups': groups} # need to consider preexisting volume types as well volume_types = db.volume_type_get_all(context.get_admin_context()) for volume_type in volume_types: # default values for subproject are 0 quota = 0 if subproject else -1 resources['gigabytes_' + volume_type] = quota resources['snapshots_' + volume_type] = quota resources['volumes_' + volume_type] = quota if tenant_id: resources['id'] = tenant_id if root: result = {'quota_set': resources} else: result = resources return result
def test_volume_type_get_all(self): expected_specs = self.vol_type1_specs.copy() types = db.volume_type_get_all(context.get_admin_context()) self.assertEquals(types[self.vol_type1["name"]]["extra_specs"], expected_specs) self.assertEquals(types[self.vol_type2_noextra["name"]]["extra_specs"], {})
def test_volume_type_get_all(self): expected_specs = self.vol_type1_specs.copy() types = db.volume_type_get_all(context.get_admin_context()) self.assertEqual( types[self.vol_type1['name']]['extra_specs'], expected_specs) self.assertEqual( types[self.vol_type2_noextra['name']]['extra_specs'], {})
def test_volume_type_get_all(self): expected_specs = self.vol_type1_specs.copy() types = db.volume_type_get_all(context.get_admin_context()) self.assertEqual(expected_specs, types[self.vol_type1['name']]['extra_specs']) self.assertEqual({}, types[self.vol_type2_noextra['name']]['extra_specs'])
def get_all_types(context, inactive=0, filters=None, marker=None, limit=None, sort_keys=None, sort_dirs=None, offset=None, list_result=False): """Get all non-deleted volume_types. Pass true as argument if you want deleted volume types returned also. """ vol_types = db.volume_type_get_all(context, inactive, filters=filters, marker=marker, limit=limit, sort_keys=sort_keys, sort_dirs=sort_dirs, offset=offset, list_result=list_result) return vol_types
def schedule_create_volume(self, context, request_spec, filter_properties): """Use volume type extra_specs to store tenant info for tenant isolation""" volume_id = request_spec.get('volume_id') snapshot_id = request_spec.get('snapshot_id') image_id = request_spec.get('image_id') volume_properties = request_spec.get('volume_properties') availability_zone = volume_properties.get('availability_zone') context_dict = context.to_dict() tenant_name = context_dict['project_name'] # check if request has volume type and volume type matching tenant # if no volume type in request, search db for tenant's bind volume type # if no bind volume type, add default volume type to create volume volume_type = request_spec.get('volume_type') if volume_type: specs = volume_type.get('extra_specs') if 'tenant_name' in specs: if specs['tenant_name'] != tenant_name: msg = _("Tenant cannot use volume type %s." % volume_type['name']) raise exception.InvalidVolumeType(reason=msg) else: #check db if user's tenant has been bond to a volume type bindType = False volume_types = db.volume_type_get_all(context) for key in volume_types: specs = volume_types[key].get('extra_specs') if 'tenant_name' in specs: if specs['tenant_name'] == tenant_name: bindType = True request_spec['volume_type'] = volume_types[key] break if not bindType: request_spec['volume_type'] = db.volume_type_get_by_name( context, 'DEFAULT') LOG.debug(str(request_spec)) host = 'MyHost' updated_volume = driver.volume_update_db(context, volume_id, host) self.volume_rpcapi.create_volume(context, updated_volume, host, request_spec, filter_properties, snapshot_id=snapshot_id, image_id=image_id) return None
def get_all_types(context, inactive=0, search_opts=None): """Get all non-deleted volume_types. Pass true as argument if you want deleted volume types returned also. """ search_opts = search_opts or {} filters = {} if 'is_public' in search_opts: filters['is_public'] = search_opts['is_public'] del search_opts['is_public'] vol_types = db.volume_type_get_all(context, inactive, filters=filters) if search_opts: LOG.debug("Searching by: %s" % search_opts) def _check_extra_specs_match(vol_type, searchdict): for k, v in searchdict.items(): if (k not in vol_type['extra_specs'].keys() or vol_type['extra_specs'][k] != v): return False return True # search_option to filter_name mapping. filter_mapping = {'extra_specs': _check_extra_specs_match} result = {} for type_name, type_args in vol_types.items(): # go over all filters in the list for opt, values in search_opts.items(): try: filter_func = filter_mapping[opt] except KeyError: # no such filter - ignore it, go to next filter continue else: if filter_func(type_args, values): result[type_name] = type_args break vol_types = result return vol_types
def resources(self): """Fetches all possible quota resources.""" result = {} # Global quotas. argses = [('volumes', '_sync_volumes', 'quota_volumes'), ('snapshots', '_sync_snapshots', 'quota_snapshots'), ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'), ] for args in argses: resource = ReservableResource(*args) result[resource.name] = resource # Volume type quotas. volume_types = db.volume_type_get_all(context.get_admin_context(), False) for volume_type in volume_types.values(): for part_name in ('volumes', 'gigabytes', 'snapshots'): resource = VolumeTypeResource(part_name, volume_type) result[resource.name] = resource return result
def get_all_types(context: context.RequestContext, inactive: int = 0, filters: Optional[dict] = None, marker: Optional[dict[str, Any]] = None, limit: Optional[int] = None, sort_keys: Optional[list[str]] = None, sort_dirs: Optional[list[str]] = None, offset: Optional[int] = None, list_result: bool = False) -> Union[dict[str, Any], list]: """Get all non-deleted volume_types. Pass true as argument if you want deleted volume types returned also. """ vol_types = db.volume_type_get_all(context, inactive, filters=filters, marker=marker, limit=limit, sort_keys=sort_keys, sort_dirs=sort_dirs, offset=offset, list_result=list_result) return vol_types
def resources(self): """Fetches all possible quota resources.""" result = {} # Global quotas. argses = [('volumes', '_sync_volumes', 'quota_volumes'), ('snapshots', '_sync_snapshots', 'quota_snapshots'), ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'), ] for args in argses: resource = ReservableResource(*args) result[resource.name] = resource # Volume type quotas. # NOTE(jdg): We also want to check deleted types here as well # if we don't the _get_quotas resource len check on will fail volume_types = db.volume_type_get_all(context.get_admin_context(), True) for volume_type in volume_types.values(): for part_name in ('volumes', 'gigabytes', 'snapshots'): resource = VolumeTypeResource(part_name, volume_type) result[resource.name] = resource return result
def resources(self): """Fetches all possible quota resources.""" result = {} # Global quotas. argses = [ ('volumes', '_sync_volumes', 'quota_volumes'), ('snapshots', '_sync_snapshots', 'quota_snapshots'), ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'), ] for args in argses: resource = ReservableResource(*args) result[resource.name] = resource # Volume type quotas. volume_types = db.volume_type_get_all(context.get_admin_context(), False) for volume_type in volume_types.values(): for part_name in ('volumes', 'gigabytes', 'snapshots'): resource = VolumeTypeResource(part_name, volume_type) result[resource.name] = resource return result
def resources(self): """Fetches all possible quota resources.""" result = {} # Global quotas. argses = [ ('volumes', '_sync_volumes', 'quota_volumes'), ('snapshots', '_sync_snapshots', 'quota_snapshots'), ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'), ] for args in argses: resource = ReservableResource(*args) result[resource.name] = resource # Volume type quotas. # NOTE(jdg): We also want to check deleted types here as well # if we don't the _get_quotas resource len check on will fail volume_types = db.volume_type_get_all(context.get_admin_context(), True) for volume_type in volume_types.values(): for part_name in ('volumes', 'gigabytes', 'snapshots'): resource = VolumeTypeResource(part_name, volume_type) result[resource.name] = resource return result