服务器展示中的镜像属性

https://blueprints.launchpad.net/nova/+spec/image-properties-in-server-show

此规范建议在服务器展示 API 中显示实例的嵌入式镜像属性。 这有很多用途,但尤其适用于 vTPM 实时迁移,以便向用户显示为其实例设置的 vTPM 密钥安全级别。

问题描述

Nova 在实例创建和重建时将镜像的属性复制到实例系统元数据中,以便即使镜像在 glance 中稍后被更改或删除,也能保持这些信息可用。 但是,nova API 并不向用户返回这些权威信息。 由于镜像属性会影响实例的调度方式以及在 hypervisor 中为其启用的功能,因此这些信息对用户非常有用。

用例

  • 作为 VM 的所有者,我希望了解 nova 在调度和构建我的 VM 时使用的镜像属性,即使镜像在 glance 中被更改或删除。

  • 特别是,作为现有 VM 的所有者,我想在嵌入式镜像属性中看到 hw_vtpm_secret_security,以便在我同意此类安全更改之前,我可以观察应用于我的 VM 的默认 vTPM 安全模式。 请参阅 vTPM 实时迁移

  • 作为 VM 的所有者,我想检测管理员是否通过 nova-mange image_property set 代表我更改了任何镜像属性。

提议的变更

在一个新的 API 微版本中,在 GET /server/detailsGET /server/{server_id} 以及 POST /server/{server_id}/action 响应的重建用例中返回嵌入式镜像属性。

实现需要从 instance.system_metadata 中的镜像详细信息缓存中填充 API 响应的这部分。

备选方案

为每个依赖于镜像属性的特性实现单独的顶级字段。

数据模型影响

没有影响,因为镜像属性已经建模并持久化了。

REST API 影响

在一个新的微版本中,以下 API 响应将被扩展

  • GET /server/details

  • GET /server/{server_id}

  • POST /server/{server_id} 其中 action 是 rebuild

一个新的 properties 子键将被添加到现有的 image 键下,作为一个字典,其中键和值都遵循模式 ^[a-zA-Z0-9-_:. ]{1,255}$

新的子键将包含在响应中,并采用这些 API 的当前默认策略,即 PROJECT_READER_OR_ADMIN

响应示例

{
  "servers": [
    {
      "id": "65fc9d2f-1d02-4bb0-8602-b505252b17f8",
      "name": "vm1",
      "status": "ACTIVE",
...
      "image": {
        "id": "197c0527-f0f8-4f94-9ccc-82759bf0dc21",
        "links": [
...
        ],
        "properties": {
          "hw_machine_type": "pc-q35-8.2",
          "hw_vtpm_secret_security": "host",
          "hw_tpm_version": "2.0",
          "hw_tpm_model": "tpm-crb"
...
        },
      },
      "locked": false,
...
    }
  ]
}

安全影响

通知影响

其他最终用户影响

性能影响

没有,系统元数据已经在 API 响应生成时从数据库加载 自微版本 2.73 以来

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

?

功能联络人

功能联络人

balazs-gibizer

工作项

  • 在一个新的 API 微版本中,扩展 API 响应

依赖项

测试

  • 单元测试

  • API 示例功能测试

文档影响

  • API 参考

参考资料

历史

修订版

发布名称

描述

2025.1 Epoxy

引入