可确定支持的启动设备列表¶
https://blueprints.launchpad.net/ironic/+spec/supported-boot-device-list
此蓝图建议添加一种机制,以返回特定于被查询节点的、可确定支持的启动设备列表。
问题描述¶
当前的驱动程序接口 get_supported_boot_devices() 没有提供访问被查询节点的方式,因此无法计算出特定于该节点的、可确定支持的启动设备列表。
例如,如果节点使用的架构不是 x86,例如 SPARC,那么 PXE 启动不受支持,因此不应包含在返回的列表中。SPARC 架构支持 WANBOOT,应该返回此信息。但是,要确定这一点,需要访问节点的属性“cpu_arch”。
提议的变更¶
向 get_supported_boot_devices() 接口添加“task”参数。
通过向 get_supported_boot_devices() 接口提供“task”参数,驱动程序可以访问特定于此查询的节点,例如 task.node,并从中查看节点的属性,从而正确确定要返回的支持的启动设备列表。
此更改将向后兼容,使用 inspect 来确定特定驱动程序是否已实现“task”参数,如果未实现“task”参数,则显示弃用警告。
get_suported_boot_devices() 在没有 task 参数的情况下的弃用将在下一个版本中完成,之后没有 task 参数的 get_supported_boot_devices() 将不再受支持。
备选方案¶
访问正在进行 get_supported_boot_devices 请求的特定节点的唯一方法是通过传递 task 参数。
替代方案 1:限制所有驱动程序只能注册特定架构的节点。然后,get_supported_boot_devices() 的底层驱动程序 API 将假定该节点必须是特定架构,并始终为该架构返回静态列表。
这种方法具有限制性,会导致 ironic 中可用的驱动程序数量不必要地增加,并且可能导致代码不必要的重复。
替代方案 2:利用 set_boot_device(task, device),这种方法在大多数情况下会验证“device”是否受此节点支持。这里正在传递 task 参数,因此可以访问节点以确定“device”是否对特定节点受支持。问题在于,必须多次调用它才能确定受支持的设备列表,并且每次成功的调用都会导致实际设置节点的启动设备的 IPMI 调用,这将是不可接受且效率低下的。
这种方法不完整,无法解决通过 ironic CLI 调用 get_supported_boot_devices() 的场景。这仍然会导致将潜在的不正确的设备列表返回给用户。
替代方案 3:这更多的是对提议的解决方案的补充。添加一个名为“supported_boot_devices”的新必需节点属性。此属性将在节点检查期间填充,然后可以查询它以确定支持的启动设备列表。
但是,仍然需要访问节点,因此需要将 task 参数传递给 get_supported_boot_devices()。
数据模型影响¶
无
状态机影响¶
无
REST API 影响¶
无
客户端 (CLI) 影响¶
无
RPC API 影响¶
无
驱动程序 API 影响¶
get_supported_device_list() 是标准管理接口的成员。
此更改将影响所有驱动程序,但将实现向后兼容,使用 inspect 来确定驱动程序是否支持 task 参数。如果不支持,将显示弃用警告。
Nova 驱动程序影响¶
无
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
所有树内驱动程序和单元测试都将修改为包含新的“task”参数。树外驱动程序将看到弃用警告,直到它们实现新的“task”参数。
实现¶
负责人¶
- 主要负责人
mattkeenan
工作项¶
将“task”添加到基本驱动程序中的 get_supported_devices_list()
添加新的管理属性定义,以检查驱动程序是否支持 task 参数。
更新所有树内驱动程序,添加 task 参数
更新所有受更改影响的单元测试
依赖项¶
无
测试¶
将更新所有受影响的单元测试
升级和向后兼容性¶
通过使用 python 的 inspect 模块来确定驱动程序的 get_supported_device_list() 实现是否包含“task”参数来实现向后兼容性。如果没有,将不带“task”参数调用它,并显示弃用警告。
文档影响¶
无
参考资料¶
Bug: https://bugs.launchpad.net/ironic/+bug/1391598 Review: https://review.openstack.org/#/c/188466