def get_all_types(context, inactive=0, search_opts=None): """Get all non-deleted share_types. """ search_opts = search_opts or {} filters = {} if 'is_public' in search_opts: filters['is_public'] = search_opts.pop('is_public') share_types = db.share_type_get_all(context, inactive, filters=filters) for type_name, type_args in share_types.items(): required_extra_specs = {} try: required_extra_specs = get_valid_required_extra_specs( type_args['extra_specs']) except exception.InvalidExtraSpec: LOG.exception('Share type %(share_type)s has invalid required' ' extra specs.', {'share_type': type_name}) type_args['required_extra_specs'] = required_extra_specs search_vars = {} if 'extra_specs' in search_opts: search_vars['extra_specs'] = search_opts.pop('extra_specs') if search_opts: return {} elif search_vars: LOG.debug("Searching by: %s", search_vars) def _check_extra_specs_match(share_type, searchdict): for k, v in searchdict.items(): if (k not in share_type['extra_specs'].keys() or share_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 share_types.items(): # go over all filters in the list for opt, values in search_vars.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 share_types = result return share_types
def get_all_types(context, inactive=0, search_opts=None): """Get all non-deleted share_types. """ search_opts = search_opts or {} filters = {} if 'is_public' in search_opts: filters['is_public'] = search_opts.pop('is_public') share_types = db.share_type_get_all(context, inactive, filters=filters) for type_name, type_args in six.iteritems(share_types): required_extra_specs = {} try: required_extra_specs = get_valid_required_extra_specs( type_args['extra_specs']) except exception.InvalidExtraSpec as e: values = { 'share_type': type_name, 'error': six.text_type(e) } LOG.exception(_LE('Share type %(share_type)s has invalid required' ' extra specs: %(error)s'), values) type_args['required_extra_specs'] = required_extra_specs if search_opts: LOG.debug("Searching by: %s", search_opts) def _check_extra_specs_match(share_type, searchdict): for k, v in six.iteritems(searchdict): if (k not in share_type['extra_specs'].keys() or share_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 six.iteritems(share_types): # go over all filters in the list for opt, values in six.iteritems(search_opts): 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 share_types = result return share_types
def get_all_types(context, inactive=0, search_opts=None): """Get all non-deleted share_types. """ search_opts = search_opts or {} filters = {} if 'is_public' in search_opts: filters['is_public'] = search_opts.pop('is_public') share_types = db.share_type_get_all(context, inactive, filters=filters) for type_name, type_args in share_types.items(): required_extra_specs = {} try: required_extra_specs = get_valid_required_extra_specs( type_args['extra_specs']) except exception.InvalidExtraSpec: LOG.exception( 'Share type %(share_type)s has invalid required' ' extra specs.', {'share_type': type_name}) type_args['required_extra_specs'] = required_extra_specs search_vars = {} availability_zones = search_opts.get('extra_specs', {}).pop('availability_zones', None) extra_specs = search_opts.pop('extra_specs', {}) if extra_specs: search_vars['extra_specs'] = extra_specs if availability_zones: search_vars['availability_zones'] = availability_zones.split(',') if search_opts: # No other search options are currently supported return {} elif not search_vars: return share_types LOG.debug("Searching by: %s", search_vars) def _check_extra_specs_match(share_type, searchdict): for k, v in searchdict.items(): if (k not in share_type['extra_specs'].keys() or share_type['extra_specs'][k] != v): return False return True def _check_availability_zones_match(share_type, availability_zones): type_azs = share_type['extra_specs'].get('availability_zones') if type_azs: type_azs = type_azs.split(',') return set(availability_zones).issubset(set(type_azs)) return True # search_option to filter_name mapping. filter_mapping = { 'extra_specs': _check_extra_specs_match, 'availability_zones': _check_availability_zones_match, } result = {} for type_name, type_args in share_types.items(): # go over all filters in the list (*AND* operation) type_matches = True for opt, value in search_vars.items(): try: filter_func = filter_mapping[opt] except KeyError: # no such filter - ignore it, go to next filter continue else: if not filter_func(type_args, value): type_matches = False break if type_matches: result[type_name] = type_args return result
def get_all_types(context, inactive=0, search_opts=None): """Get all non-deleted share_types. """ search_opts = search_opts or {} filters = {} if 'is_public' in search_opts: filters['is_public'] = search_opts.pop('is_public') share_types = db.share_type_get_all(context, inactive, filters=filters) for type_name, type_args in share_types.items(): required_extra_specs = {} try: required_extra_specs = get_valid_required_extra_specs( type_args['extra_specs']) except exception.InvalidExtraSpec: LOG.exception('Share type %(share_type)s has invalid required' ' extra specs.', {'share_type': type_name}) type_args['required_extra_specs'] = required_extra_specs search_vars = {} availability_zones = search_opts.get('extra_specs', {}).pop( 'availability_zones', None) extra_specs = search_opts.pop('extra_specs', {}) if extra_specs: search_vars['extra_specs'] = extra_specs if availability_zones: search_vars['availability_zones'] = availability_zones.split(',') if search_opts: # No other search options are currently supported return {} elif not search_vars: return share_types LOG.debug("Searching by: %s", search_vars) def _check_extra_specs_match(share_type, searchdict): for k, v in searchdict.items(): if (k not in share_type['extra_specs'].keys() or share_type['extra_specs'][k] != v): return False return True def _check_availability_zones_match(share_type, availability_zones): type_azs = share_type['extra_specs'].get('availability_zones') if type_azs: type_azs = type_azs.split(',') return set(availability_zones).issubset(set(type_azs)) return True # search_option to filter_name mapping. filter_mapping = { 'extra_specs': _check_extra_specs_match, 'availability_zones': _check_availability_zones_match, } result = {} for type_name, type_args in share_types.items(): # go over all filters in the list (*AND* operation) type_matches = True for opt, value in search_vars.items(): try: filter_func = filter_mapping[opt] except KeyError: # no such filter - ignore it, go to next filter continue else: if not filter_func(type_args, value): type_matches = False break if type_matches: result[type_name] = type_args return result