使 os-instance-actions 读取已删除的实例¶
https://blueprints.launchpad.net/nova/+spec/os-instance-actions-read-deleted-instances
修改 os-instance-actions API 以读取已删除的实例,以便所有者可以查看对其已删除实例执行的操作。
问题描述¶
目前 os-instance-actions API 无法读取已删除的实例 [1]。
此外,实例删除时不会软删除 instance_actions,因此我们可以直接从数据库中读取它们,而无需 `read_deleted='yes'` 标志。
实例操作的目的是审计,并且在实例删除后的调查中,instance_actions 将被用于此目的,但由于 API 的限制,无法使用已删除的实例从 API 中获取这些信息。
用例¶
多个用户在同一个项目/租户中。
用户 A 删除了一个共享实例。
用户 B 想知道发生了什么(或谁删除了它)。
由于用户 B 与用户 A 位于同一个项目中,因此用户 B 应该能够查找该实例的操作。
提议的变更¶
为 os-instance-actions API 添加一个微版本更改,以便在通过 uuid 查找实例时,修改上下文并设置 `read_deleted='yes'` 属性。
备选方案¶
我们可以假设操作员正在监听 nova 通知并将这些通知存储起来以供以后查找,以确定谁删除了实例。这是一个不太好的假设,因为它依赖于在 nova 外部设置一个外部监控系统,而该系统是可选的。
操作员可以直接查询数据库以获取已删除实例的 instance actions,但他们必须了解 nova 数据模型。而且只有操作员才能这样做,这不允许租户用户自行进行此查找(因此他们必须向操作员提交支持工单以进行查找)。
数据模型影响¶
无。
REST API 影响¶
受影响的 API:os-instance-actions
受影响的方法:GET
os-instance-actions API 只有两个 GET 请求
index:按实例 uuid 列出实例操作
- show:按实例 uuid 和请求 ID 显示实例操作的详细信息
包括,如果授权,相关的实例操作事件。
API 中的请求和响应值不会更改。预期的响应代码不会更改 - 如果未找到实例或实例操作,仍然会返回 404。
唯一的更改是,在查找实例时,我们将在上下文中设置 `read_deleted='yes'` 标志。这将基于请求中的微版本在一个条件块中完成。
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
由于该更改包含在服务器端 API 代码中,因此我们可以自动更新 python-novaclient 中的最大支持 API 版本,客户端无需进行任何操作,只需选择加入微版本即可。
性能影响¶
无。
其他部署者影响¶
无。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
Matt Riedemann <mriedem@us.ibm.com>
- 其他贡献者
无
工作项¶
如果请求中的微版本满足所需的最低版本,则在从数据库读取实例的 uuid 时,临时修改上下文。例如
with utils.temporary_mutation(context, read_deleted='yes'): instance = common.get_instance(self.compute_api, context, server_id)
依赖项¶
无。
测试¶
将更新单元测试。
将为微版本更改提供功能测试(API 示例测试)。场景基本上是
删除一个实例,并尝试获取其实例操作,其中请求的微版本不满足最低要求,并断言未返回任何内容。
删除一个实例,并尝试获取其实例操作,其中请求的微版本满足最低要求,并断言返回了相关的实例操作。
文档影响¶
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
引入 |