通用过滤器

背景

Cinder 从 Pike 版本开始引入了通用的资源过滤器。管理员可以通过编辑过滤器配置文件来控制非管理员用户允许的过滤器键。自此特性以来,如果指定了任何无效的查询过滤器,cinder 将会抛出 400 BadRequest 错误。

如何配置过滤器键?

resource_query_filters_file 被引入 cinder,用于表示过滤器配置文件路径,并且该配置文件以 json 格式接受非管理员用户有效的过滤器键

{
   "volume": ["name", "status", "metadata"]
}

这里的键 volume (单数) 代表您想要应用过滤器的资源,值接受一个包含允许的过滤器集合的列表。一旦配置文件更改并且 API 服务重启,cinder 将只识别这些过滤器键。注意:默认配置文件将包含所有我们已经启用的过滤器。

支持哪些过滤器键?

目前并非所有属性都受支持,因此我们添加下表来指示哪些过滤器键有效并且可以在配置中使用。

从 v3.34 开始,我们可以使用 ‘~’ 来表示支持通过不精确匹配查询资源,例如,如果我们有一个如下所示的配置文件

{
   "volume": ["name~"]
}

用户可以使用 name=volumename~=volume 来查询卷,并且命名为 volume123a_volume123 的卷对于第二个输入都是有效的,而对于第一个输入则均无效。下表中标有“*”的 API 受到支持。

API

有效的过滤器键

list volume*

id, group_id, name, status, bootable, migration_status, metadata, host, image_metadata, availability_zone, user_id, volume_type_id, project_id, size, description, replication_status, multiattach

list snapshot*

id, volume_id, user_id, project_id, status, volume_size, name, description, volume_type_id, group_snapshot_id, metadata, availability_zone

list backup*

id, name, status, container, availability_zone, description, volume_id, is_incremental, size, host, parent_id

list group*

id, user_id, status, availability_zone, group_type, name, description, host

list g-snapshot*

id, name, description, group_id, group_type_id, status

list attachment*

id, volume_id, instance_id, attach_status, attach_mode, connection_info, mountpoint, attached_host

list message*

id, event_id, resource_uuid, resource_type, request_id, message_level, project_id

get pools

name, volume_type

list types (3.52)

is_public, extra_specs