为 v2 API 添加创建和更新时间过滤

https://blueprints.launchpad.net/glance/+spec/v2-additional-filtering

本文档介绍了一项 Glance v2 API 的功能,用于基于镜像的创建或上次更新时间,使用比较运算符过滤镜像列表。

引入此功能非常重要,因为它为依赖于 changes-since 过滤的 Glance v1 API 的使用者提供了一条迁移路径,以便开始使用 v2 API。

问题描述

从 v2 API 列出镜像的规范中,受保护的属性,例如 created_atupdated_at,并未像 size_minsize_max 那样明确地标识为可用于比较运算符过滤。[1]

由于默认排序 [2] 或 v1 的 changes-since 过滤器,created_atupdated_at 字段未被索引,导致数据库中的全表扫描。

此外,v2 不支持 v1 中可用的 changes-since 过滤器 [3]。这造成了一种情况,即 v1 API 中可用的功能在 v2 API 中不可用,这限制了操作员和用户有效过滤镜像的能力。

为了促进 Glance v2 API 的采用,提供功能对等性将有所帮助。随着 v1 API 的完整替代品可用,v1 API 的弃用选项也会随之而来。为了推进这两个目标,功能对等性非常重要。

提议的变更

建议为 v2 API 的镜像列表端点添加两个新的过滤器:镜像的 created_atupdated_at 时间。

通过提出的功能,我们可以使 v2 API 的使用者能够快速识别旧实例快照以进行清理和其他潜在用例。

备选方案

必须采取措施来解决缺失的 changes-since 过滤器,以解决 Nova 和 Glance 项目在 Liberty 会议上表达的优先级。

我们可以像 v1 API 中那样实现 changes-since,而不是通过允许许多比较运算符来使功能更丰富。

我们可以暂时将 created_at 过滤器排除在此功能之外,但包含它的额外工作量很小,并且其他潜在用例也可能受益,同时也可以利用机会对该列进行索引,以提高默认排序的效率。

数据模型影响

修改 Image 域类,为 images DB 表中的 created_atupdated_at 列创建索引。

创建的额外索引将对大型 Glance 安装施加更长的升级窗口,因为索引正在构建中。

REST API 影响

遵循现有过滤器的模式,新的过滤器可以指定为查询参数,使用要过滤的字段作为键,并将过滤标准作为参数中的值。

更改仅适用于 Image API v2 Image 实体列表

GET /v2/images/{image_id}

通过添加可选查询参数进行过滤

created_at     = Specifies to limit returned images based on when the image
                 was created, with value expressed as an ISO 8601 datetime.
updated_at     = Specifies to limit returned images based on when the image
                 was last updated, with value expressed as an ISO 8601
                 datetime.

这些过滤器将使用符合 OpenStack API 工作组最新指南以及任何适用的草案指南 [4] 的语法添加。这意味着支持可选的比较运算符,默认比较运算符为“等于”,用于精确匹配。

使用可选比较运算符的可接受标准示例

gte:1985-04-12T23:20:50.52Z

这代表了 1985 年 4 月 12 日 23 点之后 20 分 50.52 秒的任何时间,以 UTC 时间计算。

注意

在所有情况下,这些过滤器中的任何文字表达式都将视为不区分大小写。

两个新过滤器都将支持通过 oslo.policy 强制执行访问控制,允许部署者限制这些过滤器的使用。由于这些过滤器支持此访问控制,因此不保证所有 API 使用者都能使用这些过滤器。可以通过使用自定义策略规则来解决任何给定部署中围绕这些过滤器的性能或安全问题。当访问过滤器被禁止时,将应用标准响应代码。

安全影响

通知影响

其他最终用户影响

根据需要更新 python-glanceclient。

性能影响

在每次创建和/或更新关联的镜像行时,也会更新每个行上的适当索引。这被认为是一个最小的影响。

索引列上的排序操作的性能将得到提高。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

steve-lewis

评审人员

核心评审人

flwang flaper87

其他审核员

工作项

  • 注册表更改以支持新过滤器

  • API 更改以公开新过滤器

  • 添加策略强制执行钩子

依赖项

测试

将根据需要添加单元和功能测试。

文档影响

需要有关新 API 过滤器和用法的文档,以及额外的策略选项。

参考资料