背景
客户需要在业务不中断的前提下通过升级接口对服务器固件进行升级。
在执行升级操作时,客户要求在升级时不立即生效固件,以避免因非预期固件激活导致业务系统中断、启动时间延长或设备上下电状态异常。
因此,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串行升级/并行升级接口扩展暂存升级操作
评审结论
通过, 具体议题结论如下:
- 通过,同意 资源协作接口
bmc.kepler.UpdateService.FirmwareInfo下新增属性StageSupported/RelatedItem/ComponentID/SubComponentID/FirmwareType/TargetUIDs,分别表征固件是否支持暂存,固件应用的对象,固件的部件标识,固件的部件子标识,固件类型,固件应用部件的UID;属性的详情见评审点1 - 通过,同意 资源协作接口
bmc.kepler.UpdateService下新增方法ActiveStagedFirmwares,表征生效暂存的固件,权限BasicSetting,请求签名as,响应签名uau;新增方法DiscardStagedFirmwares,表征删除暂存的固件,权限BasicSetting,请求签名as,响应签名uau;方法的详情见评审点2 - 通过,同意 新增资源协作接口
bmc.kepler.UpdateService.FirmwareInfo.Stage,对应的资源路径为/bmc/kepler/UpdateService/FirmwareInventory/:Id/Stage,接口表征暂存固件的信息,接口的属性有:FirmwareId、ActivateStatus、PackageName`,具体的属性说明见评审点3 - 通过,同意 UIRest 接口
/UI/Rest/BMCSettings/UpdateService/FirmwareUpdate和/UI/Rest/BMCSettings/UpdateService/ParallelUpdate请求中新增可选参数Stage,表征当前升级是否是仅暂存固件,属性类型boolean,取值有:true(暂存),false(升级,默认值) - 通过,同意新增 UIRest 接口
/UI/Rest/BMCSettings/UpdateService/ActiveStagedFirmwares,表征生效暂存的固件,请求参数中Packages表示暂存生效请求的固件集合;同意新增 UIRest 接口/UI/Rest/BMCSettings/UpdateService/DiscardStagedFirmwares,表征删除暂存的固件,请求参数Packages表示待删除的暂存生效请求的固件集合 - 通过,同意 WEBUI 固件升级-固件更新 页面增加 开始暂存 按钮,以及固件升级列表元素(显示效果参见评审点描述)
