添加禁用/启用设备 API

https://blueprints.launchpad.net/openstack-cyborg/+spec/disable-enable-device

如今,Cyborg 通过每个驱动程序发现计算节点上的设备。所有匹配驱动程序规范的设备都会被发现并作为加速器资源报告给 Placement 服务。本文档提出了一组新的 API,允许管理员用户禁用/启用设备。

问题描述

Cyborg 维护一个配置文件来配置启用的驱动程序。一旦驱动程序被启用,agent 将会发现所有 vendor ID 和 device ID 与驱动程序要求匹配的设备。如果管理员用户不希望所有设备被虚拟机使用,目前没有办法禁用某个设备。

用例

  • Alice 是一个管理员用户,她希望某些 FPGA 仅供自己使用,并且不允许它们被分配给虚拟机。例如,她想编程 FPGA 设备并将其用作主机上运行的 OVS 代理。

提议的变更

我们建议添加新的 API 以启用/禁用设备。如果设备被禁用,Cyborg 将会将该设备作为保留资源报告给 Placement,从而 Nova 无法将其调度到该设备上。相反,如果设备被启用,该设备应该变为可用,并且 Placement 中的“reserved”字段应该设置为 0。 * 由于修改了 API 层,应该引入一个新的 microversion。 * 还需要在 Device 对象和数据模型中添加一个新的字段“is_maintaining”,以指示设备是否被禁用。如果某个设备被禁用,“is_maintaining”字段应该设置为“True”,如果设备被启用,该字段应该设置为“False”。默认值应该是“False”。 * Cyborg 需要调用 Placement API 来更新此 API 中设备的“reserved”字段。 * 在 conductor 定期报告期间添加“is_maintaining”字段的值检查。

备选方案

数据模型影响

应该在 Device 的数据模型中添加一个新的列 is_maintaining

REST API 影响

由于 Device API 已更改,需要引入一个微版本。

列出设备 API

  • 返回设备列表 URL: /devices METHOD: GET 返回: 200

{
    "devices": [
        {
            "uuid": "d2446439-0142-40b7-9eee-82d855f453d9",
            "type": "FPGA",
            "vendor": "0xABCD",
            "model": "miss model info",
            "std_board_info": "{"device_id": "0xabcd", "class": "Fake class"}",
            "vendor_board_info": "fake_vendor_info",
            "hostname": "devstack01",
            "links": [
                {
                    "href": "http://172.23.97.140/accelerator/v2/devices/d2446439-0142-40b7-9eee-82d855f453d9",
                    "rel": "self"
                }
            ],
            "created_at": "2021-11-03T08:48:43+00:00",
            "updated_at": null
        }
    ]
}

获取设备 API

  • 通过 uuid 获取设备并返回详细信息 URL: /devices/{uuid} METHOD: GET 返回: 200

{
    "uuid": "d2446439-0142-40b7-9eee-82d855f453d9",
    "type": "FPGA",
    "vendor": "0xABCD",
    "model": "miss model info",
    "std_board_info": "{"device_id": "0xabcd", "class": "Fake class"}",
    "vendor_board_info": "fake_vendor_info",
    "hostname": "devstack01",
    "links": [
        {
            "href": "http://172.23.97.140/accelerator/v2/devices/d2446439-0142-40b7-9eee-82d855f453d9",
            "rel": "self"
        }
    ],
    "created_at": "2021-11-03T08:48:43+00:00",
    "updated_at": null
}

禁用设备 API

  • 禁用设备 URL: /devices/disable/{device_uuid} METHOD: POST 返回: 200 错误码: 404(设备未找到),403(角色不是管理员)

启用设备 API

  • 启用设备 URL: /devices/enable/{device_uuid} METHOD: POST 返回: 200 错误码: 404(设备未找到),403(角色不是管理员)

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

部署者需要将 Cyborg 更新到支持禁用/启用 API 的微版本。否则,禁用/启用 API 将被拒绝。

开发者影响

实现

负责人

主要负责人

王欣然(xin-ran.wang@intel.com)

工作项

  • 为设备表添加新的列 is_maintaining

  • 在 DeviceController 中添加禁用/启用 API。

  • 根据操作更新 RP reserved 字段。对于 disable 操作,reserved 字段需要设置为与 total 字段相同的值,对于 enable 操作,reserved 字段将设置为零。

  • 使用添加的 is_maintaining 字段更新 GET/LIST 设备 API 的返回值。

  • 在 cyborgclient 中添加禁用/启用操作。

  • 添加单元测试。

依赖项

测试

需要添加单元测试,如果需要,添加 tempest 测试。

文档影响

需要添加相关文档。

参考资料

历史记录

可选部分,旨在每次更新规范时使用,以描述新的设计、API 或任何数据库模式更新。有助于让读者了解随着时间的推移发生了什么。

修订版

发布名称

描述

Xena

引入

瑜伽

重新提出