2025.1 系列发布说明¶
29.0.4-10¶
错误修复¶
[Bug 2135265] 修复了一个在使用 agent inspector 接口时,检查钩子中的异常会导致节点无法清理的问题。
通过缓存 bcrypt 密码检查结果,提高了基本 HTTP 身份验证的性能。这提高了使用 JSON-RPC 和基本 HTTP 身份验证访问 API 时 Ironic conductor 的性能。
确保在尝试复制引导加载程序之前,复制引导加载程序的目标路径存在。
修复了一个竞态条件,该竞态条件可能导致 Redfish 电源接口在电源操作期间出现 HTTP 400(BadRequest)或 HTTP 409(Conflict)错误。现在,如果节点已处于目标电源状态(打开或关闭),则这些错误被视为成功,从而防止在电源状态更改完成后 Ironic 的状态验证超时时发生部署失败。 此外,刷新系统状态以从 BMC 获取当前电源状态,而不是使用可能过时的缓存数据。
修复 Swift 中库存和插件数据的存储。 之前,数据并未以 JSON 格式存储。 这意味着数据以一种奇怪的格式存储,并且缺少部分字段。
避免在 local_link_connection 检查钩子中出现未处理的异常,该异常会导致检查失败,而不是像最初预期的那样跳过缺失的端口。
通过更新应用启动模式和启动设备设置的方式,改进了与 ASRock Rack 服务器的 Redfish 兼容性。
之前,对 set_boot_device 和 set_boot_mode 的调用仅包含最少的参数(例如,BootOverrideTarget 和 BootOverrideMode),这对于某些供应商实现(如 ASRockRack)来说是不够的。
此修复更新了 Redfish 驱动程序以发送完整的有效负载,包括 BootSourceOverrideEnabled、BootSourceOverrideTarget、BootSourceOverrideMode,从而确保在这些平台上的更好合规性和可靠性。
其他说明¶
为
VENDORS_REQUIRING_FULL_BOOT_REQUEST添加了一个额外的供应商变量。 这是因为有一些公认的供应商,例如 Lenovo,它们在其硬件中使用各种 BMC,其中一些需要完整的启动请求;在这种情况下,vendor现在可以更改为redfish_compatible。
29.0.4¶
错误修复¶
在不同文件系统之间缓存镜像时,硬链接操作将失败。通过回退到复制操作来修复此问题。
修复了在检查规则创建、更新和执行期间,尽早抛出格式和模式错误的模式验证问题。
为检查规则的功能增加了对标准比较运算符(le、ge、ne)的支持,以便进行常见的逻辑条件。
修复了 HttpImageService.validate_href() ImageRefValidationFailed 异常,如果协议是 HTTP/HTTPS 并且 HTTP 标头响应是除了 301 (MOVED_PERMANENTLY) 之外的其他重定向。 HTTP/HTTPS 协议通常用于独立的 Ironic 配置中以识别镜像源(例如 –instance-info image_source=<URI>)。 HTTP 服务器可以使用重定向来进行负载均衡或地理分布请求,或者只是指向正确的 URL。 重定向可能从 301 (MOVED_PERMANENTLY) 到 302 (FOUND),或 307 (TEMPORARY_REDIRECT) 和 308 (PERMANENT_REDIRECT) 不等。
修复了将通过 ORAS 上传到 Quay.io(以及可能其他注册表)的 OCI 工件作为单个清单部署的问题。
29.0.3¶
新特性¶
增加了对节点处于
service wait状态时,可以通过delete置备操作进行取消置备的支持。
错误修复¶
在 redfish inspector 中,使用条件来控制在检查期间是否更新端口的 pxe_enabled 字段。 [inspector]update_pxe_enabled 用于控制此行为,使其与其他检查接口的行为一致。 此配置的默认值为 True。
修复了 agent 启动时的问题,由于瞬态网络问题导致第一次 agent heartbeat 交互的工作流失败,使 Agent 和 Ironic 处于节点无法部署并继续在每次额外的 heartbeat 操作上记录错误的状态。 调整了检查 agent 状态的逻辑,以忽略 agent 记录的重试操作。 有关此问题的更多信息,请参见 bug 2110698。
29.0.2¶
安全问题¶
修复了 OSSA-2025-001,其中 Ironic 在用作镜像源时,没有正确过滤 file:// 路径。 这将允许 conductor 可以访问的任何文件被用作镜像来尝试部署。
增加了
CONF.conductor.file_url_allowed_paths,这是一个允许列表配置,默认值为/var/lib/ironic、/shared/html、/opt/cache/files、/vagrant和/templates,允许操作员进一步限制 Conductor 在提供 file:// URL 时获取镜像的位置。此默认值是根据 Ironic 下游项目(包括 Metal3、Bifrost 和 OpenShift)的已知用法选择的。这些默认值可能会在以后更改为更严格。鼓励使用 file:// URL 的操作员即使当前默认值已足够,也显式设置此值。希望完全禁用使用 file:// URL 进行部署的操作员应将此配置设置为 “” (空字符串)。希望恢复原始不安全行为的操作员应将
CONF.conductor.file_url_allowed_paths设置为/。 请注意,在 2025.2 版本及更高版本中,/dev、/sys、/proc、/run和/etc将作为一项安全措施被无条件阻止。此问题仅在 Ironic 的自动清理过程被禁用并且服务配置为允许不受信任的 API 用户直接部署的情况下,才构成重大的安全风险,例如独立 Ironic 安装或将节点所有权授予项目的环境。
29.0.1¶
新特性¶
如果 allow_image_access_via_auth_token 设置为 True,Ironic 允许访问 Glance 镜像,如果请求上下文中存在 auth_token。
升级说明¶
在此版本中,allow_image_access_via_auth_token 的默认值已更改为 True。这使得 Ironic 能够在请求上下文中存在 auth token 时访问 Glance 镜像。
此更改从主分支回溯,但为这个稳定版本修改了默认值。OpenStack 集成操作员应确保用于 Ironic 的镜像使用“public”或“community”的镜像可见性,以获得最可靠的结果。
错误修复¶
修复了循环功能,使其更符合规范,其中,当存在 loop 时,args 使用 ‘{item}’ 占位符引用循环项,以支持直接数组迭代;此外,分别处理列表和字典循环项类型。
29.0.0¶
新特性¶
增加了一个
bootc部署接口,Ironic 部署管理员可以启用它,然后允许使用bootc部署接口的用户可以为将支持容器镜像的 bootc 部署到主机提供简化的路径,而无需额外的中间步骤。有关 bootc 的更多信息,请参见 bootc 网站。
增加了对 OCI 容器注册表的支持,用于检索要写入远程主机的部署工件和全盘镜像。
如果 ignore_project_check_for_admin_tasks 设置为 True,系统将检查请求者是否为管理员,以验证镜像可用性,从而绕过管理任务的项目检查。
增加了 Ironic 的 Conductor 检测 Zstandard 压缩内容并自动解压缩文件的能力,以启用镜像格式检测和转换。
这是由于容器注册表中存储的工件使用 Zstandard 压缩是一种常见的做法,可以使用
[conductor]disable_zstandard_decompression配置选项禁用。
增加了一个新的入口点
ironic.console.container,用于确定在ironic.conf[vnc]enabled=True时如何编排控制台容器。默认情况下,fake提供程序由[vnc]container_provider指定,它不执行任何编排。包含的唯一功能实现是systemd,它将容器作为 Systemd Quadlet 容器管理。这些容器作为用户服务和 rootless podman 容器运行。安装podman也是此提供程序的依赖项。请参阅ironic.conf[vnc]选项,以了解如何配置此提供程序。systemd提供程序具有主观性,可能不适合某些 Ironic 部署方法,尤其是那些在容器内运行 Ironic 的方法。鼓励ironic.console.container的外部实现与其他的部署/管理方法集成。
增加了新的
console驱动程序redfish-graphical和fake-graphical。这允许访问 Dell iDRAC、HPE iLO 和 Supermicro 主机的图形控制台。fake-graphical驱动程序对于演示ironic-novncproxy和systemd提供程序ironic.console.container的完整集成很有用。
增加了一个新的服务
ironic-novncproxy,它允许主机图形控制台在 NoVNC 网页浏览器界面中呈现。主机需要受支持的console驱动程序才能访问其图形控制台。
增加了对节点在服务失败状态下可以通过
delete置备操作进行取消置备的支持。
当
ironic.conf[vnc]read_only=True设置时,键盘和鼠标事件将不会传递到控制台。
升级说明¶
如果需要图形控制台支持,则需要启动和管理
ironic-novncproxy服务。需要在ironic.conf的[vnc]部分中设置图形控制台特定的选项。
从 DHCP 驱动程序接口方法中删除未使用的和(Rocky 之前的版本)已弃用的 token 参数。
弃用说明¶
控制台驱动程序
ipmitool-shellinabox的使用已被弃用,将在 Ironic 的未来版本中删除。做出此决定是因为 shellinabox 的分支似乎已被放弃,7 年来没有更改和开放问题,呼吁项目移交 维护权。
错误修复¶
在从 glanceclient 切换到 OpenStack SDK 以与 Glance 通信时,引入了一个错误,导致无法读取镜像属性,从而导致 Anaconda 部署接口无法使用 Glance 镜像。其他部署接口继续工作,但某些属性可能无法生效。有关更多详细信息,请参见 bug 2099275。
修复了物理网络段映射的识别,以便可以识别已经映射到物理网络段的虚拟接口 (VIF)。
修复了 Conductor 服务重启后无法恢复卡在
servicing状态的节点的问题。
一些供应商坚持认为软盘镜像必须为 1440 KiB,并且文件名必须以
.img结尾。 满足要求。
在获取命令状态请求中包含 agent token 参数,因为端点现在需要身份验证。
将无法恢复的安全启动状态检查失败记录在 INFO 级别。
28.0.0¶
新特性¶
增加了 API 的模式验证框架。这允许在请求处理管道的开始和结束处,根据 JSON 模式验证传入请求和传出响应。
增加了在节点创建时设置
disable_power_off以及在现有节点上设置/取消设置disable_power_off的支持。如果设置为true,则明确禁用节点的关机,而是使用重启代替开/关电。此外,如果可能,节点将被禁用(即,其 API 代理将变得不可用,并且将删除网络配置),而不是关机。
节点历史记录 API 现在支持使用 sort_key 和 sort_dir 进行查询。
已知问题¶
上游持续集成 (CI) 管道中的 IPv6 测试已被删除。这是由于通常转向 UEFI 启动,以及 EDK2 虚拟机固件的状态,该固件已知存在 许多 IPv6 问题,因此无法在 upstream 自动测试。此前 Ironic 使用 BIOS 启动测试 IPv6,但最近转向利用 Ubuntu Noble 在 upstream CI 中也限制了社区的选择,因为 BIOS ROM 固件镜像不再包含 IPv6 支持。
因此,我们被迫删除 CI 作业以进行测试。
我们希望在未来某个时候恢复此测试,如果 EDK2 修复了一些已知问题。此问题不会影响物理机器的支持,物理机器长期以来通过操作员报告和下游供应商测试得到验证。
升级说明¶
已从
[DEFAULT]组中删除了配置选项fatal_exception_format_errors。
ironic-lib 库已退役,不再需要 Ironic 运行。
如果在升级时运行基于 redfish 接口的 BIOS 作业,由于内部状态变量的更改,您的作业可能无法完成。确保在升级时没有这些操作正在进行中。
弃用说明¶
配置选项
fatal_exception_format_errors已从[ironic_lib]组中弃用,应迁移到[errors]/fatal_exception_format_errors。旧位置[ironic_lib]/fatal_exception_format_errors在弃用期间将被尊重。
错误修复¶
在从 glanceclient 切换到 OpenStack SDK 与 Glance 通信时,引入了一个错误,导致无法读取 ISO 镜像的镜像格式检查和镜像安全检查已被禁用。该功能已被禁用,以修复最初在 bug 2091611 中描述的问题。有时 Ironic 会检测到包含 GPT 的 ISO 镜像的多种镜像格式,该问题源于 oslo_utils.imageutils 库默认将 GPT 分区表格式视为额外的镜像格式,但只允许每个镜像一个镜像格式,如果检测到 gpt+iso 则会引发错误。由于镜像检查和安全检查旨在修复与 qemu-img-tools 和 qcow 镜像相关的安全问题,因此决定可以禁用 ISO 镜像的检查和安全检查,而不会降低 Ironic 的安全性。
修复了步骤验证,其中一些保留的步骤名称,
hold和wait,未被步骤验证代码正确处理。
修复了一个问题,即操作员执行包含带外和带内步骤的复杂步骤安排时,例如硬件 RAID
create_configuration步骤,后跟 agent 内部的带内步骤,实际上会导致 agent 在 Cleaning、Servicing 或 Deploying 工作流中陷入wait状态。 这与带外步骤的执行和监控方式有关。 Ironic 在开始执行新步骤之前,现在会清除正在执行的工作流的轮询锁定标志,以防止 agent 陷入停滞状态。 有关更多信息,请参见 bug 2096938。
修复了与
child nodes相关的电源处理流程,即具有parent_node设置的裸机节点,以便在父节点关机时,这些节点的电源也会关闭,并且当子节点设备明确请求处于power on状态时,父节点的电源会打开。如果子节点设备具有专用电源,则不适用,如通过名为has_dedicated_power_supply的driver_info参数指示,该参数可以设置为 “true”。
修复 CVE-2024-47211 的修复导致始终需要镜像校验和。 但是,基于 file:// 的镜像没有校验和要求。 当基于 file:// 的 image_source 缺少校验和时,现在会动态计算校验和。
修复了 redfish 会话缓存中未指定
redfish_password时的错误 bug 2097019。
通过解决 id/uuid 混淆和添加端口到端口组的连接查询,修复了端口组删除失败的问题。
在成功服务和清理后更新节点缓存。这可确保数据库中正确更新节点信息。
27.0.0¶
新特性¶
已启用一个新的模块
ironic.wsgi作为 WSGI 运行程序的入口点。例如,如果使用 uWSGI,则现在不再使用[uwsgi] wsgi-file = /bin/ironic-api-wsgi
现在可以使用
[uwsgi] module = ironic.wsgi:application
遗留的安装 WSGI 脚本将在 Ironic 的未来版本中删除。
升级说明¶
由于代码重组,一些指标已被删除:所有以
AgentDeployMixin为前缀的指标现在以CustomAgentDeploy或AgentDeploy为前缀。
使用 PostgreSQL 的部署者必须迁移到受支持的 mysql 兼容数据库,例如 MySQL 或 MariaDB。
已移除对 Python 3.8 的支持。 现在支持的最低 python 版本是 3.9。
弃用说明¶
PostgreSQL 的使用已被 OpenStack 所有项目(包括 ironic)弃用多年。但是,为了避免破坏现有的安装,我们测试了数据库迁移并对 PostgreSQL 执行了基本的功能测试。现在已删除此测试,并且在 PostgreSQL 上部署的操作员必须在升级之前迁移到 mysql 兼容数据库,例如 MySQL 或 MariaDB。
安全问题¶
Ironic 中的一个问题已得到解决,即在将镜像转换为
raw格式镜像之前,不会检查提供的镜像校验和。在默认设置下,这通常不会发生,但是
image_download_source选项,该选项可设置为节点级别进行单个部署,默认情况下,对于该裸机节点在所有情况下,或者通过[agent]image_download_source配置选项设置为local。 默认设置是http。这与
[DEFAULT]force_raw_images设置为True结合使用,导致 Ironic 下载并转换文件。在 Ironic 在更大的 OpenStack 部署中使用时,镜像来自 Glance 镜像服务,之前的模式没有问题。 该问题是由于能够提供、缓存和转换由经过身份验证的用户提供的 URL 提供的磁盘镜像而引入的。
Ironic 现在将在镜像转换之前验证 conductor 提供的用户提供的校验和。 可以通过设置
[conductor]disable_file_checksum配置选项来禁用此功能。
错误修复¶
用于检测
ipmitool命令中与密码套件版本相关的错误的字符串集已扩展。 如果字符串Error in open session response message : invalid role包含在失败的ipmitool命令输出中,则此类错误现在也被视为与不合适的密码套件相关,如果 Ironic 配置为这样做,将使用另一个密码套件版本进行重试。 有关更多详细信息,请参见 bug 2085137。
修复了 RBAC Policy
baremetal:node:disable_cleaning的策略范围检查,此前该策略限制于system用户范围。 策略限制已修订,允许project范围匹配,但默认 RBAC Policy 未进行修订。
修复了一个安全问题,即 Ironic 在下载磁盘镜像文件时不会对其进行校验和检查,而 Ironic 被要求下载并将镜像转换为原始镜像格式。 这需要将
image_download_source显式设置为local,这不是默认设置。可以通过将
[conductor]disable_file_checksum设置为True来禁用此修复,但是此选项将在新的 Ironic 主要版本中删除。因此,已经引入了与 Ironic-Python-Agent 对
standaloneIronic 用户使用的校验和的支持相一致。 这包括支持通过 URL 提供远程校验和文件,以防止破坏可能无意中利用先前代码路径的现有用户。 可以通过将[conductor]disable_support_for_checksum_files设置为True来禁用此支持。
修复了新添加的策略规则
baremetal:node:set_provision_state:clean_steps和baremetal:node:set_provision_state:service_steps,这些规则影响了使用 Ironic2024.2版本的project范围用户,他们在尝试调用service或clean置备状态命令时遇到了问题。 这是由于对要调用的正确策略检查器理解有误,并且已围绕这些函数添加了额外的测试,以确保它们今后能够按预期工作。
修复了 SQLite 数据库使用方面的问题。 之前,ironic 节点置备可能会因访问主机名而失败。 有关详细信息,请参阅 bug 2086682。
修复了中止带内检查的问题。 之前,它会因
Can not transition from state 'inspect failed' on event 'abort'而失败。
配置选项
[inspector]power_off现在实际上被启用快速通道的节点忽略,正如其帮助文档中所记录的那样。
修复了内置的带内检查实现,以便在用户请求中止检查后关闭节点,除非节点处于快速通道模式或
[inspector]power_off设置为False。
为
service wait状态添加了超时。 之前,卡在此状态的节点将永远保持在该状态。 超时值可以通过新的选项[conductor]service_callback_timeout进行调整。
添加了在端口创建期间通过“node_ident”参数传递节点名称或 UUID 的支持。 “node_uuid”参数现已弃用。
其他说明¶
类
AgentDeployMixin已从agent_base.py中删除。 继承它的第三方部署接口可能需要改为继承ironic.drivers.modules.agent.CustomAgentDeploy。如果您依赖于辅助方法
prepare_instance_to_boot或configure_local_boot,请改为从AgentDeploy继承。