将 attachmentId 添加到 os-volume_attachments API 的响应中

https://blueprints.launchpad.net/nova/+spec/add-attachmentid-to-responses-of-the-os-volume-attachments-api

本规范旨在概述为 Nova 的 os-volume_attachments API 的响应添加卷附件 ID 的用例。

问题描述

在使用 Cinder 卷附件 API 将卷附加到实例时,Nova 会在块设备映射表中记录 Cinder 卷附件的 ID。但是,目前这未通过 Nova 的 os-volume_attachments API 暴露,只能通过 Cinder 的附件 API 或直接查询 Nova 的数据库来查看。

例如,使用 v2.79 微版本 对 API 进行 GET 操作,会提供以下响应

  • GET /servers/{server_id}/os-volume_attachments

{
    "volumeAttachments": [
        {
            "delete_on_termination": false,
            "device": "/dev/sdc",
            "id": "227cc671-f30b-4488-96fd-7d0bf13648d8",
            "serverId": "d5e4ae35-ac0e-4311-a8c5-0ee863e951d9",
            "tag": null,
            "volumeId": "227cc671-f30b-4488-96fd-7d0bf13648d8"
        },
        {
            "delete_on_termination": true,
            "device": "/dev/sdb",
            "id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
            "serverId": "d5e4ae35-ac0e-4311-a8c5-0ee863e951d9",
            "tag": "foo",
            "volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
        }
    ]
}
  • GET /servers/{server_id}/os-volume_attachments/{volume_id}

{
    "volumeAttachment": {
        "delete_on_termination": true,
        "device": "/dev/sdb",
        "id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
        "serverId": "2aad99d3-7aa4-41e9-b4e6-3f960b115d68",
        "tag": "foo",
        "volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
    }
}

注意

上述响应中返回的 id 是 Nova 块设备映射记录的 ID,而不是 Cinder 中卷附件的 ID。

这使得 API 在大多数卷附加故障排除场景中都无法使用,例如,在尝试确保 Nova 具有现有且正确更新的卷附件记录时。

用例

作为操作员或用户,我希望能够确认与 Nova 中给定块设备映射记录关联的 Cinder 卷附件的 ID。

提议的变更

引入一个新的微版本,该版本将在 GET /servers/{server_id}/os-volume_attachmentsGET /servers/{server_id}/os-volume_attachments/{volume_id} 的响应中显示给定块设备映射记录的卷附件 ID。

备选方案

我们可以通过 nova-manage 命令向操作员提供此信息,但是这需要数据库访问权限,并且对用户不可用。

数据模型影响

无,attachment_id 已经为每个块设备映射记录存储。

REST API 影响

在新微版本中,在以下响应中暴露 attachmentId

注意

在实施本规范时,达成一致意见,在新的微版本下,将重复 volumeId 字段的 id 字段删除,并添加底层 BlockDeviceMapping 对象的 uuid 在新的 bdm_uuid 字段下。

  • GET /servers/{server_id}/os-volume_attachments

{
    "volumeAttachments": [
        {
            "delete_on_termination": false,
            "device": "/dev/sdc",
            "serverId": "d5e4ae35-ac0e-4311-a8c5-0ee863e951d9",
            "tag": null,
            "volumeId": "227cc671-f30b-4488-96fd-7d0bf13648d8",
            "attachmentId": "1ce1a7ee-c88c-41ce-a4d3-ce78b1ab20bf",
            "bdm_uuid": "2420cbab-4aef-409f-97c0-b60c0e1d6902"
        },
        {
            "delete_on_termination": true,
            "device": "/dev/sdb",
            "serverId": "d5e4ae35-ac0e-4311-a8c5-0ee863e951d9",
            "tag": "foo",
            "volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
            "attachmentId": "810511b1-ab87-4f42-9033-199543376ddb",
            "bdm_uuid": "e50caeba-b3f0-4a59-9973-7125d232d511"
        }
    ]
}
  • GET /servers/{server_id}/os-volume_attachments/{volume_id}

{
    "volumeAttachment": {
        "delete_on_termination": true,
        "device": "/dev/sdb",
        "serverId": "2aad99d3-7aa4-41e9-b4e6-3f960b115d68",
        "tag": "foo",
        "volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
        "attachmentId": "1ce1a7ee-c88c-41ce-a4d3-ce78b1ab20bf",
        "bdm_uuid": "2420cbab-4aef-409f-97c0-b60c0e1d6902"
    }
}

安全影响

无,操作员和用户可以通过 Cinder 附件 API 访问底层的附件详细信息,我们在这里暴露的只是卷附件到 Nova 中块设备映射记录的映射。

通知影响

其他最终用户影响

当提供足够高的微版本时,nova volume-attachments $SERVERopenstack server volume list $SERVER 命令将被扩展以暴露 attachment_id

性能影响

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

lyarwood

其他贡献者

功能联络人

功能联络人

lyarwood

工作项

依赖项

测试

将编写 API 模式、功能和 tempest 集成测试。

文档影响

将更新 API 参考、微版本历史记录、openstackclient 和 novaclient 文档。

参考资料

历史

修订

发布名称

描述

Xena

引入