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_deviceset_boot_mode 的调用仅包含最少的参数(例如,BootOverrideTargetBootOverrideMode),这对于某些供应商实现(如 ASRockRack)来说是不够的。

    此修复更新了 Redfish 驱动程序以发送完整的有效负载,包括 BootSourceOverrideEnabledBootSourceOverrideTargetBootSourceOverrideMode,从而确保在这些平台上的更好合规性和可靠性。

其他说明

  • VENDORS_REQUIRING_FULL_BOOT_REQUEST 添加了一个额外的供应商变量。 这是因为有一些公认的供应商,例如 Lenovo,它们在其硬件中使用各种 BMC,其中一些需要完整的启动请求;在这种情况下,vendor 现在可以更改为 redfish_compatible

29.0.4

错误修复

  • 在不同文件系统之间缓存镜像时,硬链接操作将失败。通过回退到复制操作来修复此问题。

  • 修复了在检查规则创建、更新和执行期间,尽早抛出格式和模式错误的模式验证问题。

  • 为检查规则的功能增加了对标准比较运算符(legene)的支持,以便进行常见的逻辑条件。

  • 修复了 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-graphicalfake-graphical。这允许访问 Dell iDRAC、HPE iLO 和 Supermicro 主机的图形控制台。fake-graphical 驱动程序对于演示 ironic-novncproxysystemd 提供程序 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 的安全性。

  • 修复了步骤验证,其中一些保留的步骤名称,holdwait,未被步骤验证代码正确处理。

  • 修复了一个问题,即操作员执行包含带外和带内步骤的复杂步骤安排时,例如硬件 RAID create_configuration 步骤,后跟 agent 内部的带内步骤,实际上会导致 agent 在 Cleaning、Servicing 或 Deploying 工作流中陷入 wait 状态。 这与带外步骤的执行和监控方式有关。 Ironic 在开始执行新步骤之前,现在会清除正在执行的工作流的轮询锁定标志,以防止 agent 陷入停滞状态。 有关更多信息,请参见 bug 2096938

  • 修复了与 child nodes 相关的电源处理流程,即具有 parent_node 设置的裸机节点,以便在父节点关机时,这些节点的电源也会关闭,并且当子节点设备明确请求处于 power on 状态时,父节点的电源会打开。如果子节点设备具有专用电源,则不适用,如通过名为 has_dedicated_power_supplydriver_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 为前缀的指标现在以 CustomAgentDeployAgentDeploy 为前缀。

  • 使用 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 对 standalone Ironic 用户使用的校验和的支持相一致。 这包括支持通过 URL 提供远程校验和文件,以防止破坏可能无意中利用先前代码路径的现有用户。 可以通过将 [conductor]disable_support_for_checksum_files 设置为 True 来禁用此支持。

  • 修复了新添加的策略规则 baremetal:node:set_provision_state:clean_stepsbaremetal:node:set_provision_state:service_steps,这些规则影响了使用 Ironic 2024.2 版本的 project 范围用户,他们在尝试调用 serviceclean 置备状态命令时遇到了问题。 这是由于对要调用的正确策略检查器理解有误,并且已围绕这些函数添加了额外的测试,以确保它们今后能够按预期工作。

  • 修复了 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_bootconfigure_local_boot,请改为从 AgentDeploy 继承。