添加禁用/启用设备 API

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

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

问题描述

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

用例

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

提议的变更

  • 由于 API 层被修改,应该引入一个新的微版本。

  • 还需要在 Device 对象和数据模型中添加一个新的字段来指示设备的状态。如果某个设备被禁用,状态应设置为“maintaining”(维护中),如果设备被启用,状态应设置为“enabled”(启用)。默认值应为“enabled”。

  • Cyborg 需要调用 Placement API 来更新设备的“reserved”(保留)字段。

备选方案

数据模型影响

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

REST API 影响

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

列出设备 API

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

{
    "devices":
    [
        {
            "uuid": "359c0990-0258-44fd-8b05-fc510ac3d022",
            "type": "FPGA",
            "vendor": "0xABCD",
            "model": "miss model info",
            "std_board_info": "{'device_id': '0xabcd', 'class': 'Fake class'}",
            "vendor_board_info": "fake_vendor_info",
            "hostname": "computenode",
            "device_status": "Enabled"
            "created_at": "2020-03-13T02:26:31+00:00",
            "updated_at": null,
            "links":
            [
                {
                    "href": "https:///accelerator/v2/devices/359c0990-0258-44fd-8b05-fc510ac3d022",
                    "rel": "self"
                }
            ]
        }
    ]
}

获取设备 API

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

{
    "uuid": "29e23349-12ee-4978-963c-11484a4ae601",
    "parent_id": null,
    "root_id": null,
    "name": "computenode_FakeDevice",
    "num_accelerators": 16,
    "device_id": 1,
    "attributes_list": "[{'traits1': 'CUSTOM_FAKE_DEVICE'}, {'rc': 'FPGA'}]",
    "rp_uuid": "853f07a6-19de-3dd6-b9f6-6c782daa3f7b",
    "driver_name": "fake",
    "device_status": "Enabled"
    "bitstream_id": null,
    "created_at": "2020-03-13T02:27:35+00:00",
    "updated_at": "2020-03-13T02:27:36+00:00",
    "links":
    [
       {
          "href": "https:///accelerator/v2/deployables/29e23349-12ee-4978-963c-11484a4ae601",
          "rel": "self"
       },
       {
          "href": "https:///accelerator/deployables/29e23349-12ee-4978-963c-11484a4ae601",
          "rel": "bookmark"
       }
    ]
}

禁用设备 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)

工作项

  • 为 device 表添加新的列 device_status

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

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

  • 使用添加了 device_status 字段的返回值更新 GET/LIST device API。

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

  • 添加单元测试。

依赖项

测试

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

文档影响

需要添加相关文档。

参考资料

历史记录

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

修订版

发布名称

描述

Xena

引入