日期过滤器¶
https://blueprints.launchpad.net/barbican/+spec/date-filters
问题描述¶
为了跟踪密钥的更改或即将到期的日期,例如 IT 审计员或运维工程师等用户需要能够基于密钥的时间戳属性来过滤发送到 API 的查询。这些用户需要新的过滤器来查询有关其密钥的信息,例如
即将到期的密钥
在特定时间范围内创建的密钥
在特定时间范围内更新的密钥
目前,Barbican 没有任何过滤器可以通过使用包含时间戳值的属性来查询密钥。因此,用户目前需要遍历整个密钥集合才能收集这些数据。
提议的变更¶
Barbican /secrets 资源应该被增强,以允许基于密钥的 created(创建)、updated(更新)和 expiration(到期)属性进行排序和过滤,如 API 工作组的 分页、过滤和排序 指南中所述
过滤器应该允许使用相等 (=)、大于 (gt)、大于等于 (gte)、小于 (lt) 和小于等于 (lte) 运算符将返回的值限制为特定的时间和时间范围。
过滤器还应该允许使用 sort 查询字符串参数对返回值进行排序,并使用升序 (asc) 和降序 (desc) 方向对指定的排序键进行排序。
传递到这些查询参数中的值假定以 UTC 时间给出,并使用 ISO 8601 中描述的扩展格式。表示 UTC 区域的指定方式是通过附加“Z”字符来实现的,这将是必需的。不包含区域指定的数值将导致状态码为 400 的错误响应。即使偏移量为零以指定 UTC,指定与 UTC 的时间偏移量也会导致 400 错误响应。
备选方案¶
要求 UTC 的区域指定(“Z”)可能过于严格。另一种选择是接受没有“Z”区域指定的数值,并假定所有数值均为 UTC。
数据模型影响¶
此更改不会影响数据模型,因为所有要在过滤中使用的值都已经存在于数据模型中。
REST API 影响¶
如上所述,将为 GET /v1/secrets 资源提供额外的查询参数。
示例
列出下周到期的密钥(假设当前时间为 2016 年 6 月 8 日 20:00 UTC),并按到期时间最早的密钥排序
GET /v1/secrets?expiration=gt:2016-06-08T20:00:00Z,lt:2016-06-15T20:00:00Z&sort=expiration:asc
列出上周创建的密钥,假设当前时间与上述相同
GET /v1/secrets?created=gt:2016-06-01T20:00:00Z,lt:2016-06-08T20:00:00Z
列出上周更新的密钥,假设当前时间与上述相同
GET /v1/secrets?updated=gt:2016-06-01T20:00:00Z,lt:2016-06-08T20:00:00Z
请求和响应中的数据格式不会更改。
安全影响¶
此更改不应影响 Barbican 的安全性,因为它只是提供了一种缩小 API 查询结果范围的方法。
通知与审计影响¶
此更改不会影响 Barbican 的通知或审计功能。
Python 和命令行客户端影响¶
python-barbicanclient 和统一 CLI 的插件都需要更新,以便为客户端提供使用这些新过滤器的方式。
其他最终用户影响¶
此更改不应产生额外的最终用户影响。
性能影响¶
实现不应使用额外的数据库查询,而应使用现有的查询,以便不会对性能产生负面影响。
其他部署者影响¶
此更改不应影响部署者。
开发人员影响¶
开发人员不应受到影响,因为这些过滤器是可选的。但是,开发人员可以在适用时使用这些过滤器。
实现¶
负责人¶
- 主要负责人
Douglas Mendizábal
- 其他贡献者
Joe Savak
工作项¶
更新控制器以接受和使用新的过滤器
更新文档以包含新添加的过滤器
更新 python-barbicanclient 以使用新的过滤器
更新统一 CLI 插件以使用新的过滤器
依赖项¶
无。
测试¶
实现此规范应包含新的功能和单元测试,以测试新的功能。
文档影响¶
API 更改需要在 API 参考以及用户指南中进行更新。
参考资料¶
API 工作组的分页、过滤和排序指南
https://git.openstack.org/cgit/openstack/api-wg/tree/guidelines/pagination_filter_sort.rst
维基百科中的 ISO 8601