并行升级特性逻辑需要新增资源协助接口及错误引擎,具体内容如下:
评审点一:
背景:并行升级接口除了支持多个固件并行升级外,还需要支持一次接口调用批量下发请求,其redfish接口样例如下(待评审),为配合该接口实现,需要新增资源协作接口单次请求下发多个升级任务
URL: redfish/v1/UpdateService/Actions/Oem/Huawei/UpdateService.ParallelUpdate
请求参数:
{
"ActivatedImmediately": false/true, // 备用名称:ActivatedAutomatically
"Packages": [
{
"TaskName": taskname, // BMC
"ImageURI": filepath,
"TransferProtocol": protocol,
"BiosActiveMode": biosactivemode,
"SystemId": systemid
},
{
"TaskName": taskname, // CPLD
"ImageURI": filepath,
"TransferProtocol": protocol,
"BiosActiveMode": biosactivemode,
"SystemId": systemid
}
]
}
响应消息体举例:
{
"@odata.context": "/redfish/v1/$metadata#TaskService/Tasks/Members/$entity",
"@odata.type": "#Task.v1_0_2.Task",
"@odata.id": "/redfish/v1/TaskService/Tasks/1",
"Id": "1",
"Name": "Update Task"
"TaskState": "Running",
"StartTime": "2016-11-28T10:36+00:00",
"Messages": [],
"SubTasks": {
"@odata.id": "/redfish/v1/TaskService/Tasks/1/SubTasks"
}
"Oem": {
"Huawei": {
"TaskPercentage": null
}
}
}
评审点:
UpdateService 资源协作接口新增方法:ParallelUpdate。
path: /bmc/kepler/UpdateService
interface : bmc.kepler.UpdateService
方法说明:
| 项目 | 值 |
|---|---|
| 方法名称 | ParallelUpdate |
| 变化类型 | 新增 |
| 权限 | BasicSetting |
| 请求签名 | a{ss}a(sa{ss}) |
| 请求参数 | UpgradeOptions:签名为 a{ss},表征当前升级的扩展参数集合,具体见参数说明:UpgradeOptionsPackages:签名为 a(sa{ss}),表征当前升级请求的固件集合,具体见参数说明:Packages |
| 响应签名 | uau |
| 响应参数 | TaskId:签名为 u,表征当前升级请求的任务标识SubTaskIds:签名为 au,表征当前升级请求中每个固件升级的子任务标识集合 |
参数说明:UpgradeOptions
UpgradeOptions 用于承载本次请求所有的升级配置,具体的取值如下:
| 参数名称 | 签名 | 参数属性名称 | 参数属性取值 | 取值说明 |
|---|---|---|---|---|
| UpgradeOptions | a{ss} | ActivatedImmediately | “false”/“true” | 本次升级完成后是否立即进行生效 |
参数说明:Packages
Packages 用于承载本次请求中各个升级包的升级信息,具体的取值如下:
| 参数名称 | 签名 | 参数属性名称 | 参数属性取值 | 取值说明 |
|---|---|---|---|---|
| Packages | s | FilePath | – | 本次升级固件的路径 |
| Packages | a{ss} | AdditionalOptions | – | 本次升级请求的额外参数集合,具体见参数说明:AdditionalOptions |
参数说明:AdditionalOptions
| 参数名称 | 签名 | 参数属性名称 | 参数属性取值 | 取值说明 |
|---|---|---|---|---|
| AdditionalOptions | a{ss} | BiosActivatedScope | “IMU”/“IMP”/ “IMF”/ “SCC” | BIOS无感升级生效区域(仅对BIOS升级有效) |
评审点二:
背景:对于不支持同时升级的固件,固件管理需要支持通用能力,通过CSR配置实现并行升级互斥:
评审点:
添加私有对象:
// 模型定义:
"MutuallyExclusiveFirmwares": {
"CurrentFirmwareId": {
"baseType": "String",
"description": "正在升级的固件ID"
},
"ExclusiveFirmwareIds": {
"baseType": "String[]",
"description": "禁止升级的固件ID列表"
}
}
// 配置样例:
"MutuallyExclusiveFirmwares_BMC": {
"CurrentFirmwareId": "0x0000001100000022",
"ExclusiveFirmwareIds": [
"0x0000003300000044",
"0x0000005500000066"
]
}
备注:
CurrentFirmwareId 与 ExclusiveFirmwareIds 属性元素由组件的 固件标识(ComponentId) 以及 固件扩展标识(ComponentIdEx) 组成一个8字节的字符串,其中 固件标识 位于高4字节。
具体的 固件标识 以及 固件扩展标识 请参考社区文档中心:BMC支持升级固件信息
评审点三:并行升级相关错误引擎新增
场景1:并行升级特性要求对等待升级的任务数量做限制,超过最大支持的待升级任务后,再次调用并行升级接口要报错,新增如下错误引擎:
"ConcurrentReachedLimit": {
"Description": "Indicates that an operation has been requested, but the operation failed because the number of concurrent operation exceeds the limit.",
"Message": "The operation failed because the number of concurrent operation has reached the limit %1.",
"Severity": "Warning",
"NumberOfArgs": 1,
"ParamTypes": [
"string"
],
"Resolution": "Try again later.",
"HttpStatusCode": 503,
"IpmiCompletionCode": "0xD5", // Cannot execute command. Command, or request parameter(s), not supported in present state.
"SnmpStatusCode": 5,
"TraceDepth": 0
}
场景2:固件统一生效任务不允许重入,即当前已经处于固件统一生效状态时,再次调用统一生效按钮要报错,新增如下错误引擎:
"ActivationInProgress": {
"Description": "Indicates that activation is in progress",
"Message": "An activation is in progress. Please wait.",
"Severity": "Warning",
"Resolution": "Wait until the activated operation is complete.",
"HttpStatusCode": 400,
"IpmiCompletionCode": "0xD5", // Cannot execute command. Command, or request parameter(s), not supported in present state.
"SnmpStatusCode": 5,
"TraceDepth": 0
}
评审结论
- 评审点1:通过,同意
bmc.kepler.UpdateService接口新增方法ParallelUpdate - 评审点2:通过,同意新增
MutuallyExclusiveFirmwares私有对象,同时需要做好对应的配置指导说明 - 评审点3:通过,同意新增错误引擎:
ConcurrentReachedLimit、ActivationInProgress