推广 iPXE 为独立的启动接口

https://bugs.launchpad.net/ironic/+bug/1628069

iPXE 启动应该被推广为独立的启动驱动接口。这将简化代码库,并且避免强制设置全局 PXE vs iPXE conductor 设置。

问题描述

目前,设置 PXE 或 iPXE 是强制性的,针对每个 conductor 进行设置,并且考虑到节点接管的可能性,这种选择实际上是针对整个 Ironic 安装的全局设置。

由于这个原因,当前 PXEBoot 接口的代码充斥着

if CONF.pxe.ixpe_enabled ...

最近添加或提议的更改(例如 CONF.pxe.ipxe_use_swift 选项)使那里的逻辑更加复杂。

提议的变更

建议实现一个独立的 iPXE 启动接口,它将使用新的方式来提供 iPXE 启动脚本和启动配置文件,直接从 Ironic API 获取,如 动态 iPXE 配置 规范中概述的那样。

新的接口将获得一个单独的 [ipxe] 配置部分,所有 [pxe]ipxe_* 选项都应该按照配置选项的适当弃用策略移动到那里。当前 PXEBoot 接口的 iPXE 相关行为应该被弃用,并最终移除。

备选方案

继续将 PXE 和 iPXE 混合在单个驱动接口中,并全局设置 iPXE vs PXE。

数据模型影响

状态机影响

REST API 影响

客户端 (CLI) 影响

“ironic” CLI

“openstack baremetal” CLI

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

Ramdisk 影响

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

  • 将添加一个新的配置部分 [ipxe],其中大部分 ipxe_* 选项都从当前的 [pxe] 部分复制过来(选项名称中移除 ipxe_)。由于 oslo_config 库,新的选项将与旧的、已弃用的选项向后兼容,并在未显式设置时使用它们的值。

  • 此更改不会立即生效。启用它需要操作员有意识的选择

    • 使用这个新的 iPXEBoot 启动接口的驱动程序必须被组合

    • 该驱动程序必须分配给节点

开发人员影响

实现

负责人

主要负责人

pshchelo (Pavlo Shchelokovskyy)

工作项

  • 创建一个新的 iPXEBoot 启动接口

    • 识别并重构 PXEBootiPXEBoot 接口通用的代码

  • 将此驱动程序注册为 ironic.hardware.interfaces.boot 的入口点

    • 将其添加到 ironic 配置中默认启用的启动接口列表 ([DEFAULT]enabled_boot_interfaces 配置选项)

  • 添加适当的文档

依赖项

测试

除了至少在一个 gate job 上启用使用这个新提议的启动接口的驱动程序之外,似乎不需要特定的覆盖范围。

升级和向后兼容性

该功能不会立即影响现有的安装,因为它首先必须通过启用接口和使用这个启动接口组合适当的驱动程序手动启用。

现有驱动程序不依赖于此功能。

还建议弃用并最终从 PXEBoot 接口中移除 iPXE 功能。

iPXEBoot 驱动程序仍然支持链式加载一个 iPXE 兼容的引导加载程序,以支持较旧/更笨拙/有缺陷的硬件。

文档影响

记录新的驱动程序接口及其用法。

参考资料