2025.2 系列发布说明

32.0.0-29

错误修复

  • [Bug 2135265] 修复了一个在使用 agent inspector 接口时,检查钩子中的异常会导致节点无法清理的问题。

  • 确保在尝试复制引导加载程序之前,复制引导加载程序的目标路径存在。

  • 当 disable_deep_image_inspection = true 时,代码路径使用目标文件名作为源文件名,导致失败。由于代码尝试清理的方式,此错误被吞没,仅在稍后使用文件时才会被捕获。

  • 修复了一个竞态条件,该竞态条件可能导致 Redfish 电源接口在电源操作期间出现 HTTP 400(BadRequest)或 HTTP 409(Conflict)错误。现在,如果节点已处于目标电源状态(打开或关闭),则这些错误被视为成功,从而防止在电源状态更改完成后 Ironic 的状态验证超时时发生部署失败。 此外,刷新系统状态以从 BMC 获取当前电源状态,而不是使用可能过时的缓存数据。

  • 现在,在缓存期间会过滤掉固件包版本为空或空的 NIC 固件组件,以避免违反 NOT NULL 数据库约束。

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

  • 修复了 ironic 的 pxe 过滤器逻辑,一些操作员可能会利用该逻辑来限制对资源的访问,这与硬件发现用例相关。在移除 eventlet 期间,启动器被无意中破坏了。

  • 修复 Swift 中库存和插件数据的存储。 之前,数据并未以 JSON 格式存储。 这意味着数据以一种奇怪的格式存储,并且缺少部分字段。

  • 修复了一个问题,即虚拟媒体 ISO 创建(Redfish 和 iLO 驱动程序使用)没有尊重特定于架构的内核和 ramdisk 配置参数。当配置了 deploy_kernel_by_archdeploy_ramdisk_by_arch(或它们的救援等效项)时,ISO 生成仍然会使用通用参数,而不是根据节点的 CPU 架构选择正确的内核和 ramdisk。这尤其影响需要与 x86_64 节点不同的代理镜像的 ARM64 节点。有关更多信息,请参阅 bug 2126991

  • flat 网络驱动程序现在在重新绑定操作无法绑定任何 VIF 时会引发 NetworkError,而不是默默地继续。这可以防止在所有端口绑定在节点重新绑定期间失败时出现意外行为。

  • 在 2025.2 中添加了一个功能,允许 Ironic conductor 访问与其项目共享的镜像,以及它自己的镜像,但检查没有正确使用 Glance API,导致无法正常工作。这修复了它,并公开了一个类型检查的方法。Bug #2099276。

  • 修复了 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) 不等。

  • 修复了一个问题,即某些 iDRAC10 机器需要特定的虚拟媒体插槽。Ironic 将尝试自动识别版本,并确保使用正确的插槽来插入 iso。有关详细信息,请参阅 bug 2125571

  • 添加了 ilo 驱动程序弃用升级检查警告。

  • 避免在 local_link_connection 检查钩子中出现未处理的异常,该异常会导致检查失败,而不是像最初预期的那样跳过缺失的端口。

  • 修复了一个问题,即在 HP iLO Generation 11 机器上固件升级失败,因为在固件组件缓存过程中 NetworkAdapters 端点返回 HTTP 400(错误请求)响应。异常处理允许代码继续执行,绕过该问题。

  • 修复了将通过 ORAS 上传到 Quay.io(以及可能其他注册表)的 OCI 工件作为单个清单部署的问题。

  • 通过更新应用启动模式和启动设备设置的方式,改进了与 ASRock Rack 服务器的 Redfish 兼容性。

    之前,对 set_boot_deviceset_boot_mode 的调用仅包含最少的参数(例如,BootOverrideTargetBootOverrideMode),这对于某些供应商实现(如 ASRockRack)来说是不够的。

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

  • 修复了图像源 URL 验证的问题,这些 URL 会重定向到另一个 URL。 之前,它会引发 UnboundLocalError。

  • 内核参数 ipa-inspection-callback-url 现在在设置时使用 external_callback_url 配置。 之前,即使配置了 external_callback_url,此 URL 也会使用内部地址,这与正确使用外部地址的 ipa-api-url 造成不一致。

  • 修复了 OpenStack Nova 集成安装中的一个问题,即在 baremetal 实例重新调度期间,MAC 地址可能在 Neutron 服务中冲突,方法是允许在节点处于 AVAILABLE 状态时断开 VIF 的连接。有关更多详细信息,请参阅 bug bug 2109300

其他说明

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

32.0.0

序言

Ironic 开发者自豪地宣布我们为 2025.2 开发周期发布的 Ironic 32.0.0。此版本为 Ironic 带来了实质性的变化,这将改善 Ironic 的体验和性能。这些赫拉克勒斯般的努力包括移除 Eventlet、数据库对象间接引用、Redfish 检查使用检查规则和钩子。以及大量的错误修复,以解决操作员的反馈,最终改善用户体验。所有这些工作都建立在我们先前发布的 31.0.0 和 30.0.0 版本之上,这些版本都是作为此开发周期的一部分而执行的。

新特性

  • 添加了定期清理数据库中过时 conductor 条目的功能。一个新的定期任务会自动删除已离线超过配置超时时间段的 conductor 记录,有助于防止积累过时的 conductor 条目。

    已在 [conductor] 部分添加了三个新的配置选项

    • conductor_cleanup_interval - 运行清理任务的频率(秒),默认为 86400 秒 - 1 天。例如:86400 秒 = 1 天,604800 秒 = 1 周,2592000 秒 = 30 天(约 1 个月)。

    • conductor_cleanup_timeout - conductor 必须离线多长时间才被认为过时并有资格进行清理(默认为 1209600 秒 - 2 周)。此值始终需要至少比 [conductor]heartbeat_timeout 大 3 倍,因为否则,活动的 conductor 可能会被错误地从数据库中删除。如果未满足此要求,清理任务将跳过执行并记录警告。

    • conductor_cleanup_batch_size - 单次操作中要清理的过时 conductor 的最大数量(默认为 50)。

  • 已向 Port 对象添加了一个新的“category”字段。该字段旨在帮助区分不同类型的 Port。与基于 trait 的端口调度功能相关。

  • 已向 Port 对象添加了一个新的“vendor”字段。该字段旨在帮助区分不同类型的 Port。与基于 trait 的端口调度功能相关。

  • redfish 检查界面现在可以使用检查规则以及检查钩子。

  • 在 redfish 检查界面中添加了检查钩子,用于处理检查期间接收到的数据。添加了三个默认配置钩子 validate-interfacesportsarchitecture。在 redfish 配置部分添加了一个新的配置选项 inspection_hooks

  • 添加了 Ironic API 服务在没有直接连接到 Ironic 数据库后端的情况下运行的能力。而是通过可重定位对象的概念使用 RPC 对象模型。可以使用 [default]use_rpc_for_database 设置来利用这种操作模式,但如果将 [default]rpc_transport 选项设置为 nonelocal,则也表示该模式。

  • Ironic 现在为所有定期和后台活动使用本机 OS 线程。此更改不可配置,如果观察到 Ironic 的操作出现任何问题,请随时向开发人员社区报告它们。

升级说明

  • futurist 库的最低版本现在是 3.2.0。此更改是为了支持从 Ironic 中移除 Eventlet 库。

  • 已从 setup.cfg 中移除 wsgi_scripts 入口点 ironic-api-wsgi。WSGI 服务器现在应直接使用模块路径 ironic.wsgi:application,而不是生成的脚本。此更改符合 OpenStack 的目标,即从 WSGI 脚本迁移到模块路径,并且与现代 Python 打包工具兼容。

    例如,使用 gunicorn

    gunicorn ironic.wsgi:application
    

    或者使用 uwsgi

    [uwsgi]
    module = ironic.wsgi:application
    
  • 已移除 Apache mod_wsgi 示例配置。操作员应使用现代 WSGI 服务器(如 uWSGI 或 Gunicorn),它们提供更好的性能并且更易于配置。有关示例,请参阅更新的部署文档。

  • 在 Ironic 31.0 中引入的 [local_rpc] 组中的选项已被移除,不再有效。

  • 在使用 redfish 检查方法时,节点属性 cpus 将不再填充。其他任何检查方法都不会填充此字段。

  • 引入了使用 API 可重定位对象的能力,导致内部对象版本增加,而没有实际的模式更改。这可能会导致升级花费更长的时间,具体取决于数据库的大小,因为对象版本将在升级序列期间更新。

  • 已删除对 Python 3.9 的支持。现在 Python 3.10 是支持的最低版本。

弃用说明

  • 虽然为了向后兼容性,遗留的 ironic.api.wsgi:initialize_wsgi_app() 函数仍然可用,但新部署应使用 ironic.wsgi:application 代替。

  • 使用 API DBHook 功能(即 API 服务代码中的 api.request.dbapi 模式)已被弃用,并且 DBHook 将在 Ironic 的未来版本中移除。任何使用此模式的下游维护者都鼓励使用对象作为 API 和数据库之间的中间垫脚石。

关键问题

  • 随着向使用本机线程的转变,Ironic 所需的内存占用量增加了。这是由于线程的使用以及为移除 Ironic 中的 eventlet 库而进行的进程模型更改所致。新的进程模型由一个启动器进程和一个代表实际应用程序工作负载的子进程组成。对于单进程 Ironic,操作员应该期望的是一个启动器进程和两个工作进程。

    对于内存使用情况,通常通过两个测量指标来跟踪。虚拟内存大小 (VSZ),它表示应用程序已分配但可能未主动使用的内存。更相关的测量指标是常驻集大小 (RSS),即实际使用的内存量。由于进程更改,操作员可以预期系统内存使用量(RSS)增加 2-3 倍。VSZ 可以预期更大,并且将与当前执行的活动线程数密切相关。

    Ironic 项目意识到这可能需要操作员调整应用于 Ironic 的资源约束。但是,改进的并发性和性能应该是一个合适的权衡。

错误修复

  • 通过缓存 bcrypt 密码检查结果,提高了基本 HTTP 身份验证的性能。这提高了使用 JSON-RPC 和基本 HTTP 身份验证访问 API 时 Ironic conductor 的性能。

  • 修复了一个问题,即从节点移除加速器设备时,重新内省不会从节点中移除以前的加速器设备信息。

  • [Bug 2069771] 修复了一个问题,即已删除或退役的 conductor 会无限期地保留在 openstack baremetal conductor list 中,状态为 Alive = False。新的定期清理任务会在配置的超时时间段后自动删除这些过时的条目。

  • 当电源状态同步确认或恢复预期状态时,last_error 字段可能会保留过时的消息,从而对健康的节点产生误导性的失败印象。如果启用了 [conductor]node_history,则该字段现在将被清除,以确保状态反映当前节点健康状况,同时保留错误历史记录。

  • 修复了根设备提示符中的 <range in> 操作符的问题。现在可以正确使用范围运算符,指定一个包含根设备大小(以 GiB 为单位)的两个值范围。

  • 修复了一个错误,即在“服务失败”状态的节点上执行的保留服务步骤(等待、保持)会错误地将节点直接转换为“活动”状态,绕过预期的中间等待/保持状态。现在,“服务失败”状态的节点在执行等待/保持步骤时会正确转换为“服务等待”或“服务保持”状态,从而保持预期的状态机流程。

  • 修复了服务中止处理,以尊重服务步骤的 abortable 标志。 之前,无论其 abortable 标志设置如何,都可以中止服务步骤。现在,如果服务步骤的 abortable 设置为 False,则中止将延迟到当前步骤完成,类似于清理步骤的工作方式。这确保了无法安全中断的服务步骤在中止生效之前能够完成。

  • 不再在将 [DEFAULT]rpc_transport 设置为 none 时使用 JSON RPC。它在过渡到 eventlet 期间是必需的,现在不再需要。可以通过将 rpc_transport 设置为 json-rpc 来启用 RPC。

  • 在使用 redfish 检查方法时,节点属性 cpu_arch 现在将使用 i686x86_64 正确填充处理器。

  • 修复了在节点处于 service fail 状态时调用 abort API 动词的能力,允许用户退出失败状态。有关更多信息,请参阅 bug 2119989

  • eventlet 库不再被 Ironic 用于线程管理。

31.0.0

新功能

  • 为 Ironic 检查规则添加了一个新的“api-call”操作插件。

    此操作允许在规则成功匹配节点检查期间触发对给定 URL 的 HTTP GET 请求。它对于与外部系统(如 webhook、警报或自动化工具)集成很有用。

    支持以下选项

    • url(必需):要调用的 HTTP 端点

    • timeout(可选,默认值:5):超时时间(秒)

    • retries(可选,默认值:3):失败时的重试次数

    • backoff_factor(可选,默认值:0.3):重试尝试的延迟因子

    • headers、proxies(可选):其他请求配置

    重试适用于状态代码 429、500、502、503 和 504。

    示例规则

    [
      {
        "description": "Trigger webhook after node inspection",
        "actions": [
          {
            "action": "api-call",
            "url": "http://example.com/hook",
            "timeout": 10,
            "retries": 5,
            "backoff_factor": 1
          }
        ]
      }
    ]
    
  • 为 Redfish 管理接口添加了两个新的功能,用于管理 BMC 时钟。

    1. 一个手动清理步骤 set_bmc_clock,允许操作员将 BMC 的硬件时钟设置为特定的日期时间(ISO8601 格式),可以选择包括 datetimelocaloffset。

    2. 一个自动验证步骤 verify_bmc_clock,将 BMC 的 Redfish 日期时间与系统 UTC 时间进行比较,并在需要时自动更新 BMC 时钟。如果更新后的差异超过 1 秒,验证将失败。

    这些步骤有助于确保在 baremetal 环境中 BMC 时钟同步,因为不正确或漂移的 BMC 时钟可能导致 TLS 证书验证失败。

  • 允许用户通过配置中 [<driver>] 部分的 verify_ca 选项指定 verify_ca 路径。当 [driver_info]/<driver>_verify_ca 被指定为 None 或 True 时,它将被 verify_ca 选项的值替换。注意:对于 idrac 驱动程序,它使用与 redfish 驱动程序相同的选项。

  • 增加了一个新的配置选项,[api] response_validation。这允许操作员配置 ironic-api 在响应模式验证失败时的行为。

  • Ironic 操作员现在可以为自动清理期间运行的步骤指定特定的步骤,而不必依赖于通常用于自动清理的基于驱动程序的隐式步骤。

    要通常选择启用此行为,首先将 [conductor]/automated_cleaning_step_source 设置为 ‘hybrid’ 或 ‘runbook’。设置为 ‘autogenerated’ (默认值) 会保留现有行为。设置 ‘runbook’ 会导致 Ironic 尝试查找并使用配置的 runbook 进行自动清理,如果未找到 runbook,则清理将失败。 ‘hybrid’ 设置会导致 Ironic 尝试查找并使用配置的 runbook 进行自动清理。如果未找到,我们将回退到默认的自动生成清理。

    清理 runbook 的配置分层,以允许最大的灵活性;Ironic 将尝试在以下位置查找清理 runbook。可以接受表示 runbook 名称或 runbook UUID 的值;并且将使用找到的最具体的值。首先,node.driver_info['cleaning_runbook'] 是节点特定的覆盖,默认情况下已禁用。要启用它,请将 [conductor]automated_cleaning_runbook_from_node 设置为 True。接下来,[conductor]automated_cleaning_runbook_by_resource_class 允许您将资源类映射到它们在自动清理中使用的预期 runbook。全局默认值,也是最终的回退,是 [conductor]automated_cleaning_runbook

    与正常的 runbook 用法一样,runbook 名称必须与节点 traits 中的一个活动 trait 匹配。可以通过将 [conductor]automated_cleaning_runbook_validate_traits 设置为 False 来更改此行为。解析到不兼容 runbook 的清理尝试将导致错误,并使节点处于清理失败状态而未清理。

  • 添加了一个新的配置选项 [conductor]error_on_ramdisk_config_inconsistency,用于控制 Ironic 处理内核和 ramdisk 配置不一致的方式。

    error_on_ramdisk_config_inconsistency 设置为 True 时,Ironic 将引发 MissingParameterValue 异常,因为它遇到不一致的内核/ramdisk 配置,例如

    • 节点的 driver_info 仅包含 deploy_kernel 但缺少 deploy_ramdisk(反之亦然)

    • 配置 [conductor]deploy_kernel_by_arch 具有缺少于 [conductor]deploy_ramdisk_by_arch 中的架构条目(反之亦然)

    • 救援内核/ramdisk 配置中的类似不一致

    当设置为 False(默认值)时,Ironic 将记录关于这些不一致的警告消息,但会继续操作,并在可能的情况下回退到全局配置值。

    在未来的 Ironic 版本中,此值的默认值将更改为 True 以强制执行严格的验证。

  • 为某些 NIC 接口的固件更新添加了对 redfish 固件接口的支持。

  • 动态步骤型流程(自动清理、手动清理、服务和部署步骤)的开始和结束现在记录到节点历史记录中,如果启用了 [conductor]record_step_flows_in_history(默认值:True)。这使得在排除部署故障时跟踪尝试过的步骤更加容易。

    第二个旋钮默认情况下已禁用,[conductor]log_step_flows_to_syslog,允许将相同的流程事件发出,但发送到服务日志。

  • REST API 和 JSON-RPC 侦听器现在尊重各自配置部分中的新选项

    • [api]cert_file / [api]key_file

    • [json_rpc]cert_file / [json_rpc]key_file

    这允许操作员为每个端点呈现不同的证书,而无需触及现在已弃用的全局 [ssl] 块,该块将在 2026.1 中删除。

    仍然依赖于全局 [ssl] 部分的部署建议将证书设置移动到每个服务的选项。

升级说明

  • 来自 oslo.service 的配置选项 [DEFAULT]/graceful_shutdown_timeout 已被配置选项 [conductor]/graceful_shutdown_timeout 替换。

    默认值(60 秒)未更改,使用自定义值的操作员应更新其配置文件以使用新的选项。

  • 新的 [conductor]error_on_ramdisk_config_inconsistency 配置选项默认设置为 False 以保持向后兼容性。现有的具有不一致的内核/ramdisk 配置的部署将继续按以前的方式工作,并记录警告消息以帮助识别潜在的配置问题。

    希望严格验证内核/ramdisk 配置的操作员可以将此选项设置为 True,但应首先查看其配置以确保所有节点 driver_info 条目和特定于架构的配置选项之间的一致性。Ironic 预计将在未来的版本中启用这些值的严格验证。

  • 在升级时,使用 rpc_transport=none 的所有一体化 Ironic 进程切换为使用 JSON RPC 通过 localhost 进行通信。这是因为当前模型与 post-eventlet 架构不兼容。

    确保本地流量可以通过端口 8089。如果不能,可以通过修改 [json_rpc]port 选项来更改端口。

  • 删除了 rootwrap 支持。由于此删除,以下文件和目录不再使用,应删除。

    • /etc/ironic/rootwrap.conf 文件

    • /etc/ironic/rootwrap.d 目录

    • ironic-rootwrap 命令

弃用说明

  • 来自 oslo.service 的配置选项 [DEFAULT]/graceful_shutdown_timeout 已被弃用,并被 [conductor]/graceful_shutdown_timeout 替换。此更改是由删除 eventlet 用法引起的。

  • SNMP 硬件类型和相关的接口已被弃用,以便在未来的 Ironic 版本中删除。它当前依赖于过时、不受支持的库,除非在 2026.1 周期结束前将其迁移到该库之外,否则将被删除。

    使用此驱动程序的操作员需要找到另一种管理其机器的方式。或者,Ironic 社区欢迎贡献以保持此驱动程序处于活动状态。

安全问题

  • 将 jinja2 更新到 3.1.6 以解决 CVE-2023-34064。代码中的单个位置已更新以与新的 jinja2 版本配合使用。

  • 此更改允许通过使用 runbook 进行声明式清理。请注意,没有验证 runbook 是否执行典型的预期清理操作,例如磁盘擦除。操作员应小心确保他们正在使用足够的步骤来安全擦除系统。

    此外,使用多租户 Ironic 集群的操作员在将 [conductor]automated_cleaning_runbook_from_node 设置为 True 之前应小心,因为它可能会允许节点所有者使清理无效。这在利用 node.lessee 的部署中并不成问题。

错误修复

  • 在检查钩子中包含以太网接口名称(身份属性)以进行库存检查,以使 Redfish 检查流程成功,请确保以太网接口名称存在于库存数据中。这对于诸如 validate-interfaces 之类的检查钩子正常工作是必需的。

  • [Bug 2092398] 修复了节点服务/清理中导致节点进入 service failedclean failed 状态的问题,原因是执行 BMC 固件更新后,BMC 在更新期间对请求无响应。现在,在执行 BMC 更新时,我们将等待一段时间再继续进行重新启动以完成更新。时间是可配置的,可以通过配置选项 [redfish]firmware_update_wait_unresponsive_bmc(默认值,300 秒)或通过在 driver-info 中设置 firmware_update_unresponsive_bmc_wait 来更改。

  • 修复了 redfish 传感器数据输出,在此之前,任何枚举值都会被视为对象,现在我们将它们的值视为字符串。

  • 修复了一个问题,即 configuration drive 中 network_data.json payload 中的“null”或缺失 MTU 值会强制重新生成 configuration drive。默认情况下启用此行为,可以通过将 [conductor]disable_metadata_mtu_check 配置选项设置为 True 来禁用。有关更多信息,请参阅 bug 2110322

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

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

  • Ironic REST API 和 JSON-RPC 端点现在由 cheroot.wsgi.Server 提供服务,而不是已弃用的 oslo_service.wsgi / eventlet 堆栈。行为和 CLI 命令未更改。

  • 删除了在不需要指定服务步骤时,在服务期间初始的无条件重新启动到 ramdisk。这减少了执行服务所需的重新启动次数,从而加快了流程。

30.0.0

新功能

  • 添加了 NVIDIA A10/A40/L40S/L20 到可以报告存在的裸机加速器中。

  • 现在可以按 conductor 组过滤端口和端口组列表。例如,以下请求仅返回属于 conductor 组 bearmetal 的端口

    GET /v1/ports?conductor_groups=bear,metal
    
  • 如果 allow_image_access_via_auth_token 设置为 True,Ironic 允许访问 Glance 镜像,如果请求上下文中存在 auth_token。

  • 添加了一个新的配置组 [agent_containers],允许用户通过 Ironic conductor 动态配置基于容器的清理。

  • 添加了一个新的配置选项 bootloader_by_arch,一个将架构名称映射到 Glance ID、http://file:// URL 的字典值,其中包含包含 EFI 引导加载程序的 EFI 系统分区镜像,以支持混合架构云中的特定于架构的虚拟媒体引导镜像。

  • 添加了一个新的布尔配置选项 [neutron]fail_on_port_binding_failure 和相应的节点 driver_info 设置 fail_on_binding_failure,以控制如果 Neutron 端口绑定失败,部署是应该失败还是继续。默认值为 true,如果您的网络未正确配置,这可能会导致部署失败。要保持以前的行为,请在您的配置中显式将此选项设置为 False。

  • 已添加“description”字段到 Port 对象。此字段允许操作员提供人类可读的描述,以便轻松识别裸机主机的物理端口。

  • 对于使用 redfish 硬件类型的用户,现在可以使用 ipmitool-socat 控制台接口。这是为了使操作员能够利用基于 IPMI 的 Serial-over-Lan 连接。此选项需要将 IPMI 参数配置在裸机节点上,以及 redfish 硬件类型。

  • 添加了一个新的选项 [json_rpc]client_use_ssl。在服务器端 TLS 由反向代理处理,因此 [json_rpc]use_ssl 设置为 False 的情况下,可以将其设置为 True。

  • 现在可以取消置备处于 service wait 状态的节点,通过 delete 置备操作。

  • Ironic conductor 现在可以访问与其项目共享的镜像,而不仅仅是它拥有的镜像。

    要使用此功能,请确保镜像与 conductor 的凭据关联的项目共享。

升级说明

  • CONF.allow_image_access_via_auth_token 在此 Ironic 版本中设置为 True。OpenStack 集成操作员应确保用于 Ironic 的镜像使用“public”或“community”图像可见性,以获得最可靠的结果。

弃用说明

  • 虽然从未在 Ironic 项目的 CI 测试之外得到支持,但 TinyIPA ramdisk 镜像的使用正在逐步淘汰。选择出于任何原因使用 TinyIPA 的用户应利用 ironic-python-agent-builder 镜像。

安全问题

  • 修复了 OSSA-2025-001,其中 Ironic 未正确过滤 file:// 路径,当用作镜像源时。这将允许 conductor 可访问的任何文件用作尝试部署的镜像。Ironic 现在无条件禁止提供对系统配置访问的路径(/dev、/sys、/proc、/boot、/run 和 /etc)。

    添加了 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 进行部署的能力,则应将此配置设置为 “” (空字符串)。

    此问题仅在 Ironic 的自动清理过程被禁用并且服务配置为允许不受信任的 API 用户直接部署的情况下,才构成重大的安全风险,例如独立 Ironic 安装或将节点所有权授予项目的环境。

错误修复

  • 在 redfish inspector 中,使用条件来控制在检查期间是否更新端口的 pxe_enabled 字段。 [inspector]update_pxe_enabled 用于控制此行为,使其与其他检查接口的行为一致。 此配置的默认值为 True。

  • 修复了循环功能,使其更符合规范,即在存在 loop 时,args 使用 ‘{item}’ 占位符引用循环项以支持直接数组迭代;此外,分别处理列表和字典循环项类型。

  • 修复了 neutron network_interface 驱动程序中的一个问题,即由 member 作用域 API 用户触发的验证调用,通过端口更新或显式节点接口验证操作触发,由于用户无法解析配置或清理网络而失败,因为这些网络位于不同的项目。

  • 修复了与 Neutron VIF 附件相关的接口绑定逻辑,以便首先进行初始 neutron 端口更新,以确保 Neutron 执行任何必要的地址分配,这将导致端口进入 ACTIVE 状态。端口的状态可能会稍后更改,因为端口在任何工作流操作中都会被更新,并提供端口配置信息,以允许 ML2 插件在适当的时候完成任何端口绑定操作。识别此问题的基本错误是 bug 2106073,这将需要额外的工作才能完全修复。

    相关地,此逻辑会分离任何先前绑定的 VIF,这些 VIF 可能已提供给 Ironic。提前分离是错误的,但可以理解的行为。

  • 修复了 agent 启动时的问题,由于瞬态网络问题导致第一次 agent heartbeat 交互的工作流失败,使 Agent 和 Ironic 处于节点无法部署并继续在每次额外的 heartbeat 操作上记录错误的状态。 调整了检查 agent 状态的逻辑,以忽略 agent 记录的重试操作。 有关此问题的更多信息,请参见 bug 2110698

  • 修复了一个问题,即 Nova 或其他尝试向 Ironic 发送网络数据的消费者可能会发送无效的网络元数据,需要替换这些元数据。Ironic 现在识别该条件,并使用附加的 VIF 记录重新生成网络元数据。这将导致一些小的差异,例如 Nova 的内部 VIF tap 名称是冗余的,并且 MTU 将包含在网络数据中,即使它们先前可能未包含在内。有关此错误的更多信息,请参阅 bug 2106073。此逻辑尝试修补或修改由 Bifrost 等工具提供的配置驱动 URL,该问题不受此问题影响。可以通过将 [conductor]disable_configdrive_check 设置为 True 来禁用此修复。

  • 更新了补丁验证逻辑,以支持字段键中的特殊字符(~/),前提是它们符合 RFC 6901 (JSON Pointer) 中定义的转义规则,这是 RFC 6902 (JSON Patch) 中指定的 path 字段所要求的。

  • 修复了一个错误,即在拆卸过程中由于意外错误导致 vif 失败时,节点不会移动到失败状态。

其他说明

  • Ironic 正在逐步删除 TinyIPA 的测试和使用,TinyIPA 最初是作为一种轻量级的低内存 IPA 镜像开发的,旨在简化上游测试,并且在测试之外没有用途。由于 OpenStack 放弃了 Python3.9,TinyIPA 无法继续维护,因此 Ironic 社区将停止所有镜像的测试和使用。