【已评审】固件管理支持串/并行升级暂存机制

背景

客户需要在业务不中断的前提下通过升级接口对服务器固件进行升级。
在执行升级操作时,客户要求在升级时不立即生效固件,以避免因非预期固件激活导致业务系统中断、启动时间延长或设备上下电状态异常。
因此,BMC需要提供机制,允许用户在能对升级固件进行暂存,后续再统一触发,最终帮助客户减少维护窗口时间、提升升级可控性,并降低运维风险,体现为可感知的效率和可靠性价值。

关联ISSUE

暂无

整体方案

升级接口扩展选项:是否暂存。FirmwareInventory资源新增是否支持暂存参数
暂存:
在升级时,如果选择暂存,判断该固件是否支持升级暂存,如果不支持则升级失败,如果支持暂存,则存入指定目录并注册一个待暂存生效任务
暂存生效任务查询:
客户能通过接口查询待暂存生效的固件以及暂存的结果
暂存生效或删除:
客户能通过触发暂存生效接口,根据所选的暂存生效任务,去生效对应的暂存生效固件,同时如果客户误升级不想要生效改固件,可以直接取消生效

评审点

评审点一 FirmwareInventory资源新增属性

path: “/bmc/kepler/UpdateService/FirmwareInventory/:Id” (原有)
interfaces: “bmc.kepler.UpdateService.FirmwareInfo”(原有)
变更点:新增属性

属性名称 签名 说明 取值范围 默认值 属性读写 属性权限 属性值来源 持久化 属性广播
StageSupported b 表示固件是否支持暂存升级 true/false false 只读 ReadOnly 下层升级组件注册至固件管理 false
RelatedItem as 固件应用的设备 - 只读 ReadOnly 下层升级组件注册至固件管理 false
ComponentID y 固件ID,用于匹配待升级固件 255(0xff) 只读 ReadOnly 下层升级组件注册至固件管理 false
SubComponentID u 固件ID,用于匹配待升级固件 4294967295
(0xffffffff)
只读 ReadOnly 下层升级组件注册至固件管理 false
FirmwareType s 固件类型 - 只读 ReadOnly 下层升级组件注册至固件管理 false
TargetUIDs as 板卡唯一标识,用于匹配待升级固件 - 只读 ReadOnly 下层升级组件注册至固件管理 false

评审点二 新增固件暂存生效和固件暂存生效删除方法

资源协作path: /bmc/kepler/UpdateService(原有)
资源协作interface: bmc.kepler.UpdateService (原有)
变化类型:新增对象、新增方法
方法名称:ActiveStagedFirmwares、DiscardStagedFirmwares

方法名称 权限 请求签名 请求参数 响应签名 响应参数 说明
ActiveStagedFirmwares BasicSetting as FirmwareIds待生效的暂存固件ID uau TaskId 数据类型:U32,生效暂存固件的主任务Id
SubTaskIds,数组,子任务Id数组。每个生效暂存固件对应一个子任务
用于升级暂存生效
DiscardStagedFirmwares BasicSetting as FirmwareIds待删除的生效暂存固件ID uau TaskId 数据类型:U32,生效暂存固件的主任务Id
SubTaskIds,数组,子任务Id数组。每个生效暂存固件对应一个子任务
用于删除暂存生效任务

评审点三 新增固件暂存生效对象

资源协作path: /bmc/kepler/UpdateService/FirmwareInventory/:Id/Stage(新增)
资源协作interface:bmc.kepler.UpdateService.FirmwareInfo.Stage(新增)
变化类型:新增对象、属性
属性名称:ActivateStatus、FirmwareId、PackageName

属性名称 签名 说明 取值范围 默认值 属性读写 属性权限 属性值来源 持久化 属性广播
FirmwareId s 待生效的暂存固件ID 只读 ReadOnly 固件管理根据暂存固件是否存在来更新 false
ActivateStatus s 暂存生效状态 Pending
Activating
Activated
只读 ReadOnly Pending - 等待激活
Activating - 激活中
Activated - 已激活
false
PackageName s 固件包名称 - - 只读 ReadOnly 升级暂存时用户传入的固件包名称 false

评审点四 UIRest串行升级/并行升级接口扩展是否暂存选项

URI:/UI/Rest/BMCSettings/UpdateService/FirmwareUpdate
新增入参Stage表示升级暂存
URI:/UI/Rest/BMCSettings/UpdateService/ParallelUpdate
新增入参Stage表示升级暂存

URI: /UI/Rest/BMCSettings/UpdateService/FirmwareUpdate

  • 操作类型:POST
  • 变更点:新增入参Stage表示升级暂存
  • 请求说明
        "ReqBody": {
                        "Type": "object",
                        "Required": true,
                        "Properties": {
                            "FilePath": {
                                "Required": true,
                                "Type": "string"
                            },
                            "Stage": {
                                "Type": "boolean",
                            },
                        }
                    },
参数 参数说明 取值 可选/必选 备注
Stage 升级暂存 true – 升级暂存
false-- 升级不暂存
可选 不选时默认升级不暂存

URI: /UI/Rest/BMCSettings/UpdateService/ParallelUpdate

  • 操作类型:POST
  • 变更点:新增入参Stage表示升级暂存
  • 请求说明
        "ReqBody": {
                        "Type": "object",
                        "Required": true,
                        "Properties": {
                            "FilePath": {
                                "Required": true,
                                "Type": "string"
                            },
                            "Stage": {
                                "Type": "boolean",
                            },
                        }
                    },
参数 参数说明 取值 可选/必选 备注
Stage 升级暂存 true – 升级暂存
false – 升级不暂存
可选 不选时默认升级不暂存

评审点五 UIRest新增暂存生效/暂存固件删除接口

URI: /UI/Rest/BMCSettings/UpdateService/ActiveStagedFirmwares

  • 操作类型:POST
  • 变更点:新增URI
  • 说明:UIRest升级暂存生效接口
  • 请求说明
"ReqBody": {
    "Type": "object",
    "Required": true,
    "Properties": {
        "Packages": {
            "Type": "array",
            "Required": true,
            "Items": {
                "Type": "object",
                "Properties":{
                    "FirmwareId":{
                        "Type": "string",
                        "Required": true
                    }
                }
            }
        }
    }
},
参数 参数说明 取值 可选/必选 备注
Packages 暂存生效请求的固件集合 必选
FirmwareId 暂存待生效固件ID 必选

URI: /UI/Rest/BMCSettings/UpdateService/DiscardStagedFirmwares

  • 操作类型:POST
  • 变更点:新增URI
  • 说明:UIRest升级暂存生效删除接口
  • 请求说明
"ReqBody": {
    "Type": "object",
    "Required": true,
    "Properties": {
        "Packages": {
            "Type": "array",
            "Required": true,
            "Items": {
                "Type": "object",
                "Properties":{
                    "FirmwareId":{
                        "Type": "string",
                        "Required": true
                    }
                }
            }
        }
    }
},
参数 参数说明 取值 可选/必选 备注
Packages 删除暂存生效请求的固件集合 必选
FirmwareId 待删除的暂存待生效固件Id 必选

评审点六 WEBUI串行升级/并行升级接口扩展暂存升级操作

评审结论

通过, 具体议题结论如下:

  1. 通过,同意 资源协作接口 bmc.kepler.UpdateService.FirmwareInfo 下新增属性StageSupported/RelatedItem/ComponentID/SubComponentID/FirmwareType/TargetUIDs,分别表征固件是否支持暂存,固件应用的对象,固件的部件标识,固件的部件子标识,固件类型,固件应用部件的UID;属性的详情见评审点1
  2. 通过,同意 资源协作接口 bmc.kepler.UpdateService 下新增方法ActiveStagedFirmwares,表征生效暂存的固件,权限BasicSetting,请求签名as,响应签名uau;新增方法 DiscardStagedFirmwares,表征删除暂存的固件,权限BasicSetting,请求签名as,响应签名uau;方法的详情见评审点2
  3. 通过,同意 新增资源协作接口 bmc.kepler.UpdateService.FirmwareInfo.Stage,对应的资源路径为 /bmc/kepler/UpdateService/FirmwareInventory/:Id/Stage,接口表征暂存固件的信息,接口的属性有:FirmwareId、ActivateStatus、PackageName`,具体的属性说明见评审点3
  4. 通过,同意 UIRest 接口 /UI/Rest/BMCSettings/UpdateService/FirmwareUpdate/UI/Rest/BMCSettings/UpdateService/ParallelUpdate 请求中新增可选参数 Stage,表征当前升级是否是仅暂存固件,属性类型boolean,取值有:true(暂存),false(升级,默认值)
  5. 通过,同意新增 UIRest 接口 /UI/Rest/BMCSettings/UpdateService/ActiveStagedFirmwares,表征生效暂存的固件,请求参数中 Packages表示暂存生效请求的固件集合;同意新增 UIRest 接口 /UI/Rest/BMCSettings/UpdateService/DiscardStagedFirmwares,表征删除暂存的固件,请求参数 Packages 表示待删除的暂存生效请求的固件集合
  6. 通过,同意 WEBUI 固件升级-固件更新 页面增加 开始暂存 按钮,以及固件升级列表元素(显示效果参见评审点描述)

@linyao

  1. 资源协作接口的属性类型统一使用签名进行记录
  2. 对于升级暂存的场景,需要说明清楚为什么 ParallelUpdate 和 StageUpdate 的区别,为什么需要这两种
  3. 评审的 UIRest 接口是怎么使用的,是否有对应的 WEBUI 以及 online help 的变更
  1. 已修改
  2. 并行和串行都需要支持暂存场景
  3. 在固件暂存之后,客户使用UIRest接口/UI/Rest/BMCSettings/UpdateService/ActiveStagedFirmwares,生效暂存固件。如果客户误升级不想要生效该固件,可以通过接口 /UI/Rest/BMCSettings/UpdateService/DiscardStagedFirmwares直接取消暂存。WEBUI见评审点六,需要根据WEBUI刷新web online help