可确定支持的启动设备列表

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

工作项

  • 在基本驱动程序中向 get_supported_devices_list() 添加“task”。

  • 添加新的管理属性定义,以检查驱动程序是否支持 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