Wallaby 系列 (16.1.0 - 17.0.x) 发布说明

17.1.0-23

升级说明

  • 升级 Ironic 以解决 qemu-img 镜像转换安全问题时,还需要升级 ironic-python-agent ramdisk。

  • 作为对 qemu-img 镜像转换安全问题进行修复的结果,Ironic 添加了一个新的配置参数 [conductor]permitted_image_formats,默认值为“raw,qcow2,iso”。 Raw 和 qcow2 格式的磁盘镜像是在 Ironic 社区始终声明允许并期望与 Ironic 一起使用的镜像格式。 这些格式也与社区测试的格式相匹配。 如果利用其他磁盘镜像格式的操作员,可能需要进一步修改此设置。

  • 添加了 sha256sha384sha512 作为 iRMC 驱动程序支持的 SNMPv3 身份验证协议。

安全问题

  • Ironic 现在检查提供的镜像格式值与镜像文件的检测格式是否匹配,如果值不匹配,将阻止部署。 如果与 Glance 一起使用并且检测到元数据不匹配,则需要重新上传镜像,以表示更正后的元数据。 这是由跟踪的 CVE-2024-44082 引起的 bug 2071740

  • Ironic 始终 检查通过 conductor 传递的提供的用户镜像内容是否安全,然后再部署节点,即使镜像以 raw 格式提供。 这用于识别镜像的格式和镜像的整体安全性,以便明确拒绝具有未知或不安全功能使用的源镜像。 可以通过将 [conductor]disable_deep_image_inspection 设置为 True 来禁用此功能。 这是由跟踪的 CVE-2024-44082 引起的 bug 2071740

  • Ironic 还会检查通常作为直接下载 URL 提供的镜像,由 ironic-python-agent ramdisk 提供。默认情况下启用此功能,会增加导管的网络流量和磁盘空间利用率。可以通过将 [conductor]conductor_always_validates_images 设置为 False 来禁用此级别的检查。不建议这样做,因为 Zed 版本及更早版本的 ironic-python-agent ramdisk 将无法使用,原因是存在回退回归风险。这是由 CVE-2024-44082 跟踪的 bug 2071740 导致的。

  • Ironic 现在显式执行 [conductor]permitted_image_formats 设置中允许的镜像类型列表,默认值为“raw”、“qcow2”和“iso”。 虽然该项目历来一直声明允许的镜像为“qcow2”和“raw”,但之前可以提供其他 qemu-img 已知的镜像格式,并且该实用程序会尝试转换镜像。 需要“iso”支持才能支持“从 ISO 启动”ramdisk。

  • Ironic 现在显式将源输入格式传递给 qemu-img 的执行,以限制可能评估镜像的允许 qemu 磁盘镜像驱动程序,以防止针对 qemu-img 的不匹配格式攻击。

  • ansible 部署接口示例 playbook 现在为 qemu-img 的执行提供输入格式。 如果您正在使用自定义 playbook,请将“-f {{ ironic.image.disk_format }}”添加到对 qemu-img 的调用中。 如果您没有这样做,qemu-img 将自动尝试猜测,这可能导致已知的不安全问题,因为源格式驱动程序不正确。

  • 已经实施任何自定义部署驱动程序或附加功能的运营商应审查他们的下游代码,以确保他们正确调用 qemu-img。 如果有任何问题或疑虑,请联系 Ironic 项目开发人员。

  • 提醒操作员,他们应在其环境中利用清理。 禁用任何安全功能,例如清理或镜像检查,是自己承担风险。 如果您在使用安全相关功能时遇到任何问题,请不要犹豫,向项目提交错误报告。

  • [conductor]disable_deep_image_inspection 设置会自动传递给 ironic-python-agent ramdisk,并将阻止这些运行 ramdisk 在写入镜像之前执行深度检查。

  • [conductor]permitted_image_formats 设置会自动传递给 ironic-python-agent ramdisk。 如果需要显式允许其他格式,则应在 Ironic 服务配置中进行设置。

  • 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 配置选项来禁用此功能。

错误修复

  • 修复了与 qemu-img 工具的执行相关的图像处理中的多个问题,该工具用于图像格式转换,恶意用户可以制作磁盘镜像以潜在地从 ironic-conductor 进程的操作系统环境中提取信息。

    Ironic 现在明确地强制执行批准的图像格式列表,作为 [conductor]permitted_image_formats 列表,该列表反映了 Ironic 项目历史上测试过的图像格式,并被认为是可用的。测试不基于文件扩展名,而是基于对磁盘镜像文件的内容指纹识别。这被跟踪为 CVE-2024-44082,通过 bug 2071740

  • 修复了一个安全问题,即 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 来禁用此支持。

  • 修复了 Ironic 与 Cinder 的集成问题,这是由于最近与安全相关的修复导致的,详情请参见 bug 2004555。Ironic 中跟踪此修复的工作已记录在 bug 2019892 中。Ironic 现在向 Cinder 发送服务令牌,这允许绕过作为原始 CVE-2023-2088 修复的一部分添加的访问限制。Ironic 本身不受影响,但由此添加的限制确实影响了 Ironic 的使用。这是因为 Ironic 卷附件不在共享“计算节点”上,而是映射到物理机器,并且 Ironic 在初始附件之后处理附件生命周期。

  • 修复了 iRMC 驱动程序在 parse_driver_info 中的错误,如果启用了 FIPS,则 SNMP 版本始终需要为版本 3,即使 iRMC 驱动程序的 xxx_interface 实际上不使用 SNMP。

  • 修复了一个问题,系统范围用户无法在启用清理的情况下将节点置于 manageable 状态,因为 Neutron 客户端会尝试使用其用户的令牌为清理操作创建 Neutron 端口,这是设计所致。这是因为使用 system 范围发出的请求没有关联的项目,并且请求失败。

    Ironic 现在检查请求是否使用 system 范围发出,如果是,则使用内部凭据配置与 Neutron 通信。

  • 修复了 iRMC 驱动程序的 SNMPv3 消息身份验证和加密功能。iRMC 驱动程序和 iRMC 之间的 SNMPv3 身份验证仅通过安全名称进行,没有密码和加密。为了提高安全性,现在将以下参数添加到节点的 driver_info 中,可用于身份验证

    • irmc_snmp_user

    • irmc_snmp_auth_password

    • irmc_snmp_priv_password

    • irmc_snmp_auth_proto (可选,默认值为 sha)

    • irmc_snmp_priv_proto (可选,默认值为 aes)

    irmc_snmp_user 替换了 irmc_snmp_security。如果设置了 irmc_snmp_user,则将忽略 irmc_snmp_securityirmc_snmp_auth_protoirmc_snmp_priv_proto 也可以通过 [irmc] 部分的以下选项在 /etc/ironic/ironic.conf 中设置

    • snmp_auth_proto

    • snmp_priv_proto

  • 修改 iRMC 驱动程序以使用 ironic.conf [deploy] default_boot_mode 来确定默认 boot_mode。

  • 修复了 Lenovo 硬件的问题,在代理以 UEFI 引导模式将镜像写入主机后,系统固件可能会显示一个蓝色的“Boot Option Restoration”屏幕,需要手动干预才能引导已部署的节点。 该问题源于对节点的基础 NVRAM 配置进行了多次更改。 Lenovo 工程师建议更改 UEFI NVRAM,不要通过 BMC 进行任何进一步的更改来配置下一次引导。 Ironic 现在在 Lenovo 硬件上这样做。 有关此问题的更多信息和背景,请参阅 bug 2053064

  • 修复了 PXE 初始化中的一个竞争条件,其中重试我们怀疑可能是失败的 PXE 启动操作的逻辑没有检查是否已建立 agent token,这是代理初始化的第一步。

其他说明

  • python-scciclient 库的最低版本更新到 0.10.1

17.1.0

升级说明

  • 在 Wallaby 版本中,要使用 HTTPS 连接上的证书文件,iRMC 驱动程序需要 python-scciclient 版本为 >=0.8.2,<0.9.0, >=0.9.5,<0.10.0 或 >=0.10.1,<0.11.0 之一,并且 packaging >=16.5

安全问题

  • 修改了 irmc 硬件类型,以包含控制 HTTPS 证书验证强制执行的能力。默认情况下,这是强制执行的。python-scciclient 版本必须为 >=0.8.2,<0.9.0, >=0.9.5,<0.10.0 或 >=0.10.1,<0.11.0 之一,否则将不会发生证书验证。

错误修复

  • 修复了 anaconda 部署接口的逻辑。如果 ironic 节点的 instance_info 没有同时指定 ‘stage2’ 和 ‘ks_template’,我们就根本没有使用 instance_info。现在已修复,如果指定了 instance_info,则使用它。否则,‘stage2’ 将从镜像的属性中获取(假设在那里设置)。‘ks_template’ 值如果镜像属性中指定了,则从镜像属性中获取(因为它是可选的);否则,我们使用配置设置 ‘[anaconda] default_ks_template’。

  • 对于 anaconda 部署接口,stage2 目录不正确地使用 stage2 文件的完整路径创建;此问题已修复。

  • anaconda 部署接口期望节点的 instance_info 填充 ‘image_url’;现在通过 PXEAnacondaDeploy 的 prepare() 方法填充了它。

  • 对于 anaconda 部署接口,当部署完成并且 bm 节点正在重新启动时,节点的配置状态不正确地设置为 ‘active’——配置状态机机制现在处理该问题。

  • 对于 anaconda 部署接口,用于验证 kickstart 文件的代码不正确并导致错误;此问题已得到解决。

  • 对于 anaconda 部署接口,打包的 ‘ks.cfg.template’ 文件中的 ‘%traceback’ 部分已被弃用并导致验证失败,因此已将其删除。

  • anaconda 部署接口将内部信息保存在节点的 instance_info 中,在用户可见的 ‘stage2’ 和 ‘ks_template’ 字段中。这破坏了使用镜像属性中指定的不同镜像或模板进行重建。现在已通过将信息保存在节点的 driver_internal_info 中来修复此问题。

  • 修复了在快速跟踪模式下使用 redfish-virtual-media 启动接口更改 BIOS 设置后重启到代理的问题。以前,未配置 ISO。

  • 修复了 anaconda 部署接口中 ‘ks_options’ 键在渲染默认 kickstart 模板时未找到的错误。

  • 修复了 PXEAnacondaDeploy 接口的 deploy() 方法未返回 states.DEPLOYWAIT 的问题,导致实例直接进入 ‘active’ 而不是 ‘wait call-back’。

  • 修复了 anaconda 部署接口错误地期望镜像上的 ‘squashfs_id’ 而不是 ‘stage2_id’ 属性的问题。

  • 修复了默认 kickstart 模板 ks.cfg.template 中的心跳机制,因为心跳 API 仅接受 ‘POST’ 并且需要一个强制的 ‘callback_url’ 参数。

  • 修复了 anaconda 部署接口中 tarball 镜像的处理。允许用户指定的扩展名附加到磁盘镜像符号链接。用户现在可以通过在 OS 镜像上设置 ‘disk_file_extension’ 属性来设置文件扩展名。这使用户能够使用 anaconda 部署接口部署 tarball。

  • 修复了在使用 anaconda 部署接口时不支持自动清理的问题。

  • 修复了一个问题,Networking 服务收到的端口更新请求中传递了重复的额外 DHCP 选项。重复的 DHCP 选项导致 Networking 服务出现错误,节点配置将失败。请参阅 bug:2009774

  • 修复了 idrac-wsman 管理接口 set_boot_device 方法,该方法在存在现有作业时会使部署失败,并显示错误“无法更改电源状态为‘’power on‘’通过‘’重新启动‘’。错误:DRAC 操作失败。原因:找到未完成的配置作业:<现有作业列表>。在重试之前,请确保它们已完成。”。现在可以存在非 BIOS 作业在部署期间。对于存在 BIOS 作业的情况,仍然会失败。在这种情况下,应考虑迁移到 idrac-redfish,该接口在设置启动设备时没有此限制。

  • 修复了在 IPv6 路由提供商网络上配置/清理失败的问题。请参阅 bug:2009773

  • 修复了 redfishidrac-redfish RAID create_configurationapply_configurationdelete_configuration 清理和部署步骤,以在步骤结束时更新节点的 raid_config 字段。

  • 修复了 redfish 硬件类型中失败的 RAID 配置任务的确定。在此修复之前,失败的任务被报告为成功。

  • 修复了 redfish 硬件类型 RAID 设备创建和删除问题,当在需要重新启动且不允许在 RAID 控制器上运行多个任务的 RAID 控制器上创建或删除多个逻辑磁盘时出现问题。在此修复之前,第二个逻辑磁盘将无法创建或删除。通过此更改,现在可以在 iDRAC 系统上使用 redfish raid 接口。

  • 修复了 redfish-virtual-media boot 接口,允许它与 iDRAC 固件从 6.00.00.00(2022 年 6 月发布)一起使用,因为它修复了阻止 iDRAC 固件在使用 redfish-virtual-media 之前工作的虚拟媒体启动问题。如果尚未完成,请考虑升级 iDRAC 固件,否则在使用 redfish-virtual-media 时仍然会收到错误。

  • 修复了客户端由于节点分页在 max_limit 处中断,因为 resource_url 未初始化而导致的 404 错误。

  • 修复了客户端由于端口和端口组分页在 max_limit 处中断,因为 resource_url 未初始化而导致的 404 错误。

  • 修复了图像缓存代码中 File name too long,当 URL 包含一个长查询字符串时。

  • 修复了使用 iPXE 从 Swift/RadosGW 直接启动 ramdisk 时 initrd 内核参数的问题。以前它总是 deploy_ramdisk,即使实际文件名不同。

  • 添加了 driver_info/irmc_verify_ca 选项以指定证书文件。driver_info/irmc_verify_ca 的默认值为 True。

  • 修复了 Python 3.8 中 driver-requirements.txt 中安装 Ansible 时的问题。自 Ansible 6.0.0 发布以来,Pip 解析器发生了重大回溯。

  • 修复了 Redfish BMC 的连接缓存问题,以前的 AccessErrors 并未使缓存的连接从被重新使用中排除。Ironic 现在将显式打开一个新连接,而不是使用缓存中的先前连接。在正常情况下,sushy redfish 库会检测并刷新会话,但是存在一种情况,它可能无法检测到故障并包含缓存的会话凭据数据,最终阻止通过 Redfish 访问 BMC,直到缓存条目过期或 ironic-conductor 服务重新启动。有关更多信息,请参阅 story 2009719

17.0.4

升级说明

  • 数据库中检索节点列表的查询模式已更改为更高效的模式,其中生成节点列表,然后执行其他查询以组合此数据。这是从一个模型中进行的更改,在该模型中,导体中的数据库客户端必须对结果数据集进行去重,这效率较低。

关键问题

  • 修复了由于缺少 BIOSSetting 数据库对象而导致的升级失败。

错误修复

  • 在 redfish 检查期间,跳过报告没有 MAC 地址的设备的端口创建。

  • 通过为每个任务缓存 AgentClient,而不是全局缓存,来修复潜在的缓存一致性问题。

  • 修复了 ramdisk 部署中的回归,即自定义内核参数在检查和清理期间未被使用。

  • 通过显式传递和处理请求的字段,解决了较低层面的数据库检索节点速度慢的问题。结果是,不会执行多余的丢弃工作,从而使整个过程更有效。这对于 OpenStack Nova 与 Ironic 的同步特别有益。

  • 修复了使用 interface_type 配置 Redfish RAID 时出现“无法为所有逻辑磁盘找到匹配的物理磁盘”错误的错误。

  • 修复了 idrac-redfish 清理/部署步骤 import_configuration 中,部分成功的作业被视为完全成功的问题。现在,完成时出现错误的此类作业被视为失败。

  • 修复了 idrac-redfish 清理/部署步骤 import_configuration,以处理 iDRAC 在 Ironic 检查状态之前删除的已完成的导入配置任务。以前的 iDRAC 固件版本 5.00.00.00 在 iDRAC Redfish 中完成任务后 1 分钟删除任务。这并不总是足以在默认情况下每分钟运行一次的定期检查中检查其状态。在此修复之前,节点将永远卡在等待模式中。通过显示错误来修复此问题,告知降低定期检查间隔或在尚未完成的情况下升级 iDRAC 固件。

  • 修复了 idrac-wsman BIOS 和 RAID 接口步骤,以正确检查完成时出现错误的 iDRAC 作业的状态。现在,这些作业被视为失败。在此修复之前,节点仍处于等待状态,因为它仅检查“已完成”或“失败”作业状态,而没有检查“已完成,但出现错误”。

  • 修复了使用 idrac-wsman 管理接口关机时,正在进行的清除作业队列清理步骤的问题。在此修复之前,清理步骤将在关机节点时失败。

  • 当使用 http(s):// 图像时,如果 HTTP 服务器未提供最后修改日期和时间,则缓存的图像副本将始终更新。以前,缓存的图像被认为是最新的,如果图像是动态生成的或在提供服务时被修改,则可能导致无效行为。

  • 通过使 ironic 不再作为生成 baremetal 节点 API 结果集的一部分而进行冗余调用,从而提高了 baremetal 节点记录检索性能。

  • 修复了周期性任务的执行模式,以便大多数驱动程序现在提前评估是否需要执行工作,然后再创建节点任务。根据各个驱动程序的查询模式,这可以防止在每次任务执行时触发过多的数据库查询。

  • 在通过 redfish 供应商接口的 eject_vmedia 供应商 passthru 调用弹出虚拟媒体设备后,删除未使用的本地图像。

  • 在 Redfish RAID 清理和部署步骤中,跳过不实现 SupportedRAIDTypes 的 Redfish 系统中的非 RAID 存储控制器。它们仍然被处理,并可能导致意外错误。

  • 重试连接到代理程序时的 ssl.SSLError

  • 修复了使用 idrac-wsman 管理接口关机时,正在进行的清除作业队列清理步骤的问题。在此修复之前,清理步骤将在关机节点时失败。

其他说明

  • 默认数据库查询模式已更改,这将导致在组合 nodes 列表时进行额外的数据库查询,方法是分别查询 traitstags。以前这是一个连接查询,需要对结果集进行去重才能构建复合对象。

17.0.3

安全问题

  • 修复了 /v1/nodes/detail 端点的问题,在该端点中,经过身份验证的用户可以显式请求 instance_uuid 查找,并且关联的节点将返回给用户,敏感字段在结果有效负载中被删除,如果用户没有对节点显式具有 ownerlessee 权限。这被认为是一个低影响低风险问题,因为它需要 API 消费者已经知道关联实例的 UUID 值,并且返回的信息主要是元数据。有关更多信息,请参阅 Storyboard story 2008976

错误修复

  • 如果代理程序接受命令,但无法回复 Ironic(这偶尔会发生,因为 eventlet 的 TLS 实现),我们当前会重试请求并失败,因为该命令已经在执行中。Ironic 现在通过在收到连接错误后检查正在执行的命令列表来检测这种情况。如果请求的命令是最后一个命令,我们假设命令请求已成功。

  • 当使用本地启动时(例如,默认情况下),实例图像验证现在仅发生在部署接口中,而不是在启动接口中(如以前)。这意味着启动接口验证现在将在许多以前会失败的情况下通过。

  • 修复了 /v1/nodes/detail 端点的问题,显式 instance_uuid 匹配的请求不会遵循标准查询处理路径,因此不会根据策略确定的访问级别和节点级别的 ownerlessee 字段进行过滤。有关更多信息,请参阅 story 2008976

  • 不再在将节点的记录发送到带内部署步骤时屏蔽 configdrive。

  • 修复了 [inspector]extra_kernel_params 配置选项中单值(非键值对)参数的处理。

  • 当通过 http 服务器提供可引导的 iso ramdisk 时,其行为是从 conductor 下载并提供镜像;只有在节点被取消部署时才会删除镜像。在某些情况下,例如在大型部署中,这可能会导致不希望的行为,例如 conductor 节点耗尽磁盘存储空间。为了避免这种情况,我们提供了一个选项 [deploy]ramdisk_image_download_source,以便能够告诉 ramdisk 接口直接使用原始来源的可引导 iso url,而不是从 conductor 节点下载并提供它。默认行为保持不变。

  • 修复了 Ironic API 性能欠佳的问题,其中与 Secure RBAC 相关的字段级别策略检查在首先检查是否存在字段结果之前执行。这有助于提高 API 性能,尤其是在 API 消费者仅请求特定列时。

17.0.2

错误修复

  • 修复了 idrac-wsman BIOS factory_reset 清理和部署步骤,使其指示成功并仅在实际重置了 BIOS 设置时才将缓存的 BIOS 设置更新为其默认值。有关更多详细信息,请参阅 story 2008058

  • 在启动或重新启动清理时删除临时清理信息。

  • 移除在使用快速通道时清理过程开始前的不必要的延迟。

  • 正确处理快速通道部署中的带内部署步骤。

  • 在检查开始和中止时正确擦除 agent token。

  • 修复了使用预构建的 ISO 镜像和 redfish-virtual-media 启动接口提供 agent token 的问题。

17.0.0

序言

Ironic 社区自豪地发布 Ironic 17.0!

如果以开发者的年数而不是主要版本来计算,我们都会非常害怕,因为它已经获得了汽车钥匙。

Ironic 的此次发布包括许多进步,这些进步扩展了操作员自定义和进一步扩展其部署的能力,以满足其需求。

  • Redfish 增强功能,包括 Out of Band RAID 配置管理以及在部署使用 redfish 的节点上自动设置安全启动。

  • 部署增强功能,包括 UEFI 分区镜像处理、每个实例的默认接口选择的部署、部署时用户可请求的 deploy_steps、IPA 文件注入以及通过 instance_info 设置节点启动模式的支持。

  • 默认情况下,支持 system 范围的角色访问控制 project 范围的访问,用于关联节点,当设置了 node ownerlessee 字段时。仅这项工作就增加了 1,500 多个新的单元测试。

  • 操作员友好的修复,例如内存密集型任务的内存过度消耗保护、供应商硬件感知处理以帮助解决诸如需要不同的设置才能调用 UEFI 之类的问题,以及数据库属性的“延迟”加载以减少整体数据库负载。

在本次开发周期的旅程中,我们修复了许多错误。

我们真诚地希望您喜欢它!

新特性

  • 现在可以配置删除和创建配置 RAID 清理步骤的优先级,这些步骤默认情况下已禁用。

  • idrac-redfish 管理接口添加了 import_configurationexport_configurationimport_export_configuration 步骤。这些步骤允许使用来自另一个系统的配置作为模板并将其复制到其他具有类似功能的系统。目前,此功能是实验性的。

  • ilo-virtual-mediailo-uefi-https 启动接口添加了通过配置参数 [ilo]/kernel_append_param 传递 kernel_append_param 设置的支持,硬件类型为 iloilo5

  • 使用 idrac-redfish 检查接口和 idrac 硬件类型添加了对发现启用 PXE 的 NIC 的支持。使用此功能,端口的 pxe_enabled 状态将记录在裸机端口上。

  • ilo5 硬件类型添加了对管理证书的支持。引入一个新的可选布尔驱动程序信息参数 ilo_add_certificates,用户可以使用它来请求使用 ilo-uefi-https 启动接口将证书添加到 iLO。

  • 添加了 [deploy]enable_nvme_secure_erase 选项,该选项允许操作员为 conductor 管理的所有节点启用 NVMe 格式化选项。

  • anaconda 部署接口添加到 Ironic。此驱动程序将使用 anaconda 安装程序和 kickstart 文件而不是 IPA 部署操作系统。为了支持此功能,将一个新的配置组 anaconda 添加到 Ironic 配置文件,以及 default_ks_template 配置选项。

    部署接口使用 heartbeat API 进行通信。kickstart 模板必须包含 %pre %post %onerror 和 %traceback 部分,这些部分应将部署状态发送回 Ironic API 使用 heartbeat。可以在默认 kickstart 模板中找到向 heartbeat API 发出此类调用的示例。要启用 anaconda 通过 heartbeat 将状态发送回 Ironic API,agent_statusagent_status_message 已添加到 heartbeat API。使用这些新参数需要 API 微版本 1.72 或更高版本。

  • ansible 部署接口添加了对快速通道的支持。

  • 允许通过新的配置选项 [ipmi]/cipher_suite_versions 提供 IPMI 密码套件版本的列表。只有在 driver_info 中未设置 ipmi_cipher_suite 时,才会使用此配置。

  • 为手动清理 API 添加了一个新的 disable_ramdisk 参数。如果设置为 true,则 IPA 不会启动进行清理。只有明确标记为兼容的步骤才能以这种方式执行。

    该参数在 API 版本 1.70 中可用。

  • 为基于虚拟媒体的部署提供操作员覆盖 URL 设置的能力,这些设置对于配置/清理是必需的。这些场景往往比更传统的部署需要更多的区分,因为它们通常具有不同的环境安全要求。使用可供这些节点(ramdisk 和 BMC)使用的 IP 地址设置这两个新的配置选项

    [deploy]
    external_http_url = <routable URL of the HTTP server>
    external_callback_url = <routable URL of bare metal API>
    
  • ilo 驱动程序检查添加了新的 GPU 动态功能。gpu_<vendor>_count: Integer gpu_<gpu_device_name>_count: Integer gpu_<gpu_device_name>: Boolean

  • 增强了 idrac-wsman 检查硬件接口,以报告一个额外的 GPU 设备,即 GV100GL [Tesla V100 PCIe 16GB]。通过此增强,将报告以下 GPU 设备

    • TU104GL [Tesla T4]

    • GV100GL [Tesla V100 PCIe 16GB]

  • 通过添加名为 idrac-redfish 的新接口,为 idrac 硬件类型添加了通过 Redfish 越界 (OOB) 管理协议管理 RAID 配置的基本支持。为此,iDRAC 固件版本必须大于 4.40.00.00。 idrac 硬件类型现在支持 idrac-wsmanidracidrac-redfishno-raid 接口,按给定的优先级顺序排列。

  • 允许通过节点 *_interface 值被节点 instance_info 字段中的值覆盖。这为非管理员用户提供了一种临时设置接口值的方法。

  • 网络数据模式现在可以通过新的配置选项 [api]network_data_schema 进行配置。

  • 添加了对使用 system 范围的 keystone 身份验证与 project 范围的请求结合使用,以实现组合的基于角色的访问控制 (RBAC) 模型的能力。由于 Ironic 主要是管理服务,因此此功能仅扩展到并非纯粹管理性质的 API 端点。这包括以下 API 端点:节点、端口、端口组、机箱、驱动程序、驱动程序供应商通道、卷目标、卷连接器、conductor、分配、事件、部署模板

  • 对于裸机分配的 project 范围的请求,将自动将请求者的 project_id 记录为节点的 owner

  • 添加了对使用 ironic-inspector 检查之前的 redfish 启用的裸机节点自动创建端口的支持。此功能是 redfish 管理接口的一部分。

  • 使用 redfish-virtual-media 启动接口向代理程序提供配置现在默认通过 USB 而不是软盘进行操作。现代硬件(甚至虚拟机)对软盘的支持有限。

  • redfish-virtual-media 启动接口及其衍生接口添加了对预构建 ISO 镜像的支持。

  • redfish 硬件类型添加了一个 redfish 原生的 raid_interface。有关详细信息,请参阅 story 2003514

    请注意,已经测试了常见的 RAID 情况,但更复杂或依赖于供应商特定实现细节的情况可能无法按预期工作,因为存在功能限制。

  • 通过 Redfish 越界 (OOB) 管理协议为 idrac 硬件类型添加了对管理 iDRAC 的支持——重置、清除作业队列以及重置为已知良好状态。这是新的 idrac-redfish 管理硬件接口实现清理步骤:reset_idracclear_job_queueknown_good_stateknown_good_state 同时重置 iDRAC 并清除其作业队列。

  • 添加了 [conductor]clean_step_priority_override 配置参数,该参数允许操作员定义清理步骤运行的自定义顺序。

  • ironic-api 进程提供的 Baremetal API 现在支持使用 system 范围的 keystone 身份验证,用于以下端点:节点、端口、端口组、机箱、驱动程序、驱动程序供应商通道、卷目标、卷连接器、conductor、分配、事件、部署模板

  • 引入了任务管理器中端口、端口组、卷连接和卷目标的延迟加载。对于创建任务管理器对象但不需要上述数据的周期性任务(例如电源同步),此更改应将数据库交互次数减少约三分之二,从而加快整体执行速度。

  • 添加了对多路径卷的支持。如果卷属性具有多个门户,则将生成多个 iscsi url 并将它们连接在一起以用于生成的 ipxe 文件。

已知问题

  • 在链接资源被访问时,同时添加了基于角色的访问控制,范围包括 projectsystem,这会增加额外的数据库查询。例如,当尝试访问 portportgroup 时,需要检查关联的节点,这有助于管理针对 project 范围请求的对象访问权限。这不会影响 system 范围的请求。采用项目范围访问权限的运维人员可能需要验证或添加额外的数据库索引,与节点 uuid 列以及任何可能接收大量项目查询范围活动的表中的 node_id 字段相关。 ironic 项目预计这将是项目未来改进数据库性能的一项工作。

升级说明

  • ilo-virtual-mediailo-uefi-https 启动接口不再使用 [pxe]pxe_append_params。要传递内核参数,请使用新的配置参数 [ilo]/kernel_append_param

  • 使用 port.extra vif_port_id 值来指示和控制 VIF 附件的功能已被删除,以支持更改权限模型和访问控制策略。自 Ocata 开发周期以来,在 VIF 附件/分离工作流程之外使用 vif_port_id 已被弃用。

  • 弃用的策略规则不是通过从源代码生成默认策略文件来表达的。生成的默认策略文件指示新的默认策略,并附带有关弃用的说明,oslo.policy 将回退到这些策略,直到将 [oslo_policy]enforce_scope[oslo_policy]enforce_new_defaults 设置为 True。请参阅 Victoria 策略配置文档以参考先前的策略配置。

  • 鼓励运维人员通过设置 [oslo_policy]enforce_scope[oslo_policy]enforce_new_defaults 迁移到基于 system 范围的身份验证。这需要从使用具有 baremetal_adminbaremetal_observeradmin project 迁移。使用 system 范围的 adminreader 帐户的系统级管理员取代了弃用的模型。

弃用说明

  • 弃用了 ATA 特定的 agent_continue_if_ata_erase_failed 代理选项,该选项已被 agent_continue_if_secure_erase_failed 替换。新选项支持 ATA 和 NVMe 安全擦除。为了确保顺利迁移到新的配置选项,运维人员需要在升级 Ironic Conductor 到 Xena 之前升级 Ironic Python Agent 镜像到 Wallaby 版本。

  • RBAC 支持之前的规则已被弃用。这些包括
    • admin_api

    • is_member

    • is_observer

    • is_node_owner

    • is_node_lessee

    • is_allocation_owner

    这些规则可能会在 Xena 开发周期中被删除。建议运维人员检查任何自定义策略规则,查找这些规则,并迁移到 安全的基于角色的访问控制模型。

  • 节点的 driver_info 参数 config_via_floppyredfish-virtual-media 启动接口中已重命名为 config_via_removable。旧别名已被弃用。

  • 使用 admin project 与 ironic 的用法已被弃用。因此,自定义角色 baremetal_adminbaremetal_observer 也已被弃用。请迁移到使用具有 adminreader 角色的 system 范围的帐户。

安全问题

  • 创建分配的能力受到新策略规则 baremetal::allocation::create_pre_rbac 的限制,该规则阻止任何项目管理员在使用新的基于角色的访问控制模型时创建分配。当 [oslo_policy]enforce_new_defaults 被设置时,此规则的使用和执行将被禁用,这也会使分配的 owner 字段自动填充。大多数部署不应遇到此安全更改的任何问题,并且当不再支持旧的 baremetal_admin 自定义角色时,将删除该策略规则。

  • 修复了一个问题,即 ironic 没有正确地使用标识符标志标记动态构建的虚拟媒体 ramdisk,导致 ramdisk 无法理解它是由虚拟媒体启动的。

错误修复

  • 在使用 Neutron DHCP 驱动程序时,Ironic 仅使用第一个固定 IP 地址来确定端口上使用的 IP 版本。现在,它会检查所有 IP 地址并为所有 IP 版本添加 DHCP 选项。

  • 拒绝不是 JSON、URL 或 base64 字符串的 configdrive。以前提供给 ironicclient 的无效 JSON 最终可能会被接受为 configdrive,这会在稍后导致故障。

  • 修复了 Python 3 转换期间中断的 [deploy]configdrive_use_object_store 选项。

  • 修复了 grub2 配置文件的问题。较高版本的 grub2(例如 2.05 或 2.06-rc1)使用 grub.cfg-01-MAC,而较低版本的 grub2(例如 2.04)使用 MAC.conf,因此我们生成两个路径以与两者兼容。

  • 修复了动态构建虚拟媒体有效负载的缺失 boot_method ramdisk 参数。此值必须设置为 vmedia,才能使在虚拟媒体上运行的 ramdisk 了解它正在从虚拟媒体执行。这对于使用基于 redfish-virtual-media 的启动接口以及支持动态虚拟媒体部署/清理 ramdisk 生成的 ilo-virtual-media 启动接口的情况已得到修复。

  • 修复了 idrac-wsman BIOS apply_configurationfactory_reset 清理和部署步骤在检查完成作业时出错时无法正确失败的问题。在修复之前,如果 BIOS 作业失败,则节点清理或部署将因超时而不是清理或部署步骤中的实际错误而失败。

  • 添加了对缺少 BootSourceOverrideMode 标志的 Redfish BMC 的处理,这样如果 BMC 不支持此字段,部署就不会再出现致命错误。这在仅具有 ComputerSystem 资源 boot 的部分实现的 BMC 上很常见,也可能在某些收到 Redfish 部分支持更新的旧代 BMC 上观察到。

  • 故事 2008252 的修复在更改启动设备后同步了启动模式,因为 Supermicro 节点如果在启动设备集中未包含,则会重置启动模式。但是,这可能会导致 Dell 节点在更改模式 uefi->bios 或 bios->uefi 时出现问题,有关详细信息,请参阅 故事 2008712。将启动模式的同步限制为 Supermicro。

其他说明

  • 清理步骤现在可以标记为 requires_ramdisk=False,以使其与新的 disable_ramdisk 手动清理 API 参数兼容。

  • ironic-api 服务提供的 Bare Metal API 的 API 版本已增加到 1.71,以表明 API 支持 System 和 Project 范围的基于角色的访问控制,这纯粹是信息性的,因为版本本身不能用于更改访问控制的 API 行为。为了实施基于角色的访问控制,添加了超过 1500 个单元测试,以帮助确保该工作不会破坏 API 行为。