添加禁用/启用设备 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:
/devicesMETHOD: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 将被拒绝。
开发者影响¶
无
实现¶
负责人¶
- 主要负责人
工作项¶
为设备表添加新的列 is_maintaining。
在 DeviceController 中添加禁用/启用 API。
根据操作更新 RP reserved 字段。对于 disable 操作,reserved 字段需要设置为与 total 字段相同的值,对于 enable 操作,reserved 字段将设置为零。
使用添加的 is_maintaining 字段更新 GET/LIST 设备 API 的返回值。
在 cyborgclient 中添加禁用/启用操作。
添加单元测试。
依赖项¶
无
测试¶
需要添加单元测试,如果需要,添加 tempest 测试。
文档影响¶
需要添加相关文档。
参考资料¶
无
历史记录¶
可选部分,旨在每次更新规范时使用,以描述新的设计、API 或任何数据库模式更新。有助于让读者了解随着时间的推移发生了什么。
发布名称 |
描述 |
|---|---|
Xena |
引入 |
瑜伽 |
重新提出 |