Dell EMC 硬件固件更新

https://storyboard.openstack.org/#!/story/2003494

操作员和部署者(例如 tripleo)需要在配置裸机服务器之前,能够将 Dell EMC 硬件的固件刷新到特定版本。

问题描述

用例

  • 操作员将服务器上某些硬件组件的固件升级到较新版本,以利用固件中的新功能或错误修复。这可以在配置之前或之后进行。

  • 操作员将服务器上某些硬件组件的固件回滚到先前版本,以避免较新固件引入的回归。这可以在配置之前或之后进行。

  • 部署者(例如 tripleo)在启动 overcloud 部署之前,将某些硬件组件的固件固定到指定的版本。

以下用例不在此规范的范围内

  • 操作员或软件组件将固件镜像上传到固件镜像仓库。

  • 操作员或软件组件从固件镜像仓库中删除固件镜像。

Dell EMC WSMAN 固件管理

WSMAN 固件管理由 iDRAC 提供。支持的操作包括:

  • 列出服务器上的固件:枚举 DCIM_SoftwareIdentity

  • 更新固件:调用 DCIM_SoftwareInstallationService.InstallFromSoftwareIdentity

Dell EMC Redfish 固件管理

Redfish 固件管理由 iDRAC 提供。支持的操作包括:

redfish 硬件类型中固件管理的支持

sushy 中固件更新的补丁已合并:https://review.opendev.org/#/c/613828/ 目前 redfish 硬件类型尚不支持固件更新。

提议的变更

由于 Dell EMC 的 ‘’redfish’’ 固件更新实现完全符合 DMTF 规范,因此决定采用 redfish 实现。

将在 RedfishManagement 类中添加一个手动清理步骤来启动固件更新。清理步骤将接受一个字典列表。每个字典将代表一个单独的固件更新,并将包含指向固件镜像的 URI。

例如

"clean_steps": [{
    "interface": "management",
    "step": "update_firmware",
    "args": {
        "firmware_images":[
            {
                "url": "file:///firmware_images/idrac/9/iDRAC-with-Lifecycle-Controller_Firmware_VRYKT_WN64_3.32.32.32_A00.EXE",
                "checksum": "<sha1-checksum-of-this-file>"
            },
            {
                "url": "swift://firmware_container/BIOS_W8Y0W_WN64_2.1.7.EXE",
                "checksum": "<sha1-checksum-of-this-file>"
            }
        ]
    }
}]

该实现将按照给定的顺序应用固件更新。

该实现将不知道所提供固件的依赖关系,或者固件是否适用于正在安装它的硬件。该实现将依赖于固件更新在这些情况下优雅地失败。

更新器将快速失败,以便如果一个更新失败,它将中止并且不会应用剩余的更新。如果在应用更新的过程中发生故障,则在失败的更新之前的成功更新将不会回滚。

清理步骤将是带外进行的。固件更新清理步骤将使用 Redfish 执行更新。目标是尽可能使用 sushy 库,如果不能,则根据需要提供供应商扩展。

虽然 iDRAC 支持回滚到上一个已知的良好固件,但此规范中不会实现此功能。相反,如果用户希望回滚到早期版本的固件,他们将只需更新到较旧版本。

虽然此功能的初始实现将使用 Redfish 协议,但它将以一种不会阻止以后添加对 WSMAN 协议支持的方式来实现。

备选方案

另一种选择是使用 iDRAC 的 Ironic Python Agent 硬件管理器通过带内方式实现固件更新。因为 WSMAN 最终将被 Redfish 取代,所以最好避免这种选择。

另一种选择是通过 Ironic Python Agent 硬件管理器为 iDRAC 通过带内方式进行固件更新。

数据模型影响

状态机影响

REST API 影响

客户端 (CLI) 影响

“ironic” CLI

用户将能够启动一个清理步骤来更新 Dell EMC 服务器上的固件。

“openstack baremetal” CLI

用户将能够启动一个清理步骤来更新 Dell EMC 服务器上的固件。

RPC API 影响

驱动程序 API 影响

将添加一个清理步骤来更新由 redfish 硬件类型管理的 Dell EMC 硬件上的固件。

Nova 驱动程序影响

Ramdisk 影响

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

要使用固件更新,用户需要配置所选硬件类型以使用 redfish 管理接口,并在节点的 driver_info 中设置 redfish 凭据。

配置选项

将在 ironic 配置文件中定义一个新的 [firmware_update] 组。以下选项将从 iLO 部分移动到该组。

use_web_server_for_images

指示是否应将镜像上传到 conductor Web 服务器。

swift_container

固件镜像的 swift 容器。

swift_object_expiry_timeout

给定 swift URL 应该失效的秒数超时时间。

开发人员影响

实现

负责人

cdearborn

工作项

  • Ironic RedfishManagement 更改以添加清理步骤

  • python-dracclient 更改以实现固件更新

  • Ironic iDRAC 硬件类型更改以添加对 Redfish 管理接口的支持

依赖项

测试

添加单元测试以测试固件更新清理步骤。

升级和向后兼容性

如果在不支持 Redfish UpdateService.SimpleUpdate 固件升级命令的 Dell EMC 服务器上尝试固件更新,则将中止清理并记录适当的错误消息。

文档影响

将更新文档以涵盖此新功能。文档将更新,以包括官方支持的 Dell EMC 硬件代数。

参考资料