背景
在当前BMC管理的设备部件中,由于硬件形态越来越复杂,部件越来越多,对于现网运维来说,需要在保证业务不中断的情况下进行升级诉求很高。因此BMC规划提供固件升级暂存机制,允许客户升级固件时,不立即生效固件(在业务许可的情况下将固件应用到具体的设备)
满足最新的 Redfish 规范中对于暂存固件的支持,构筑领先友商的运维体验,作为竞标引导项
关联ISSUE
暂无
整体方案
- Redfish 升级接口支持升级暂存选项
- Redfish接口支持升级暂存生效
- Redfish提供弃用暂存固件的接口
- Redfish接口支持升级暂存任务查询/固件是否支持升级暂存
评审点一 Redfish 升级接口支持升级暂存选项
详细描述
串行升级支持固件暂存
URI: /redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate
操作类型:POST
操作权限: BasicSetting
变更类型:请求中新增标准属性参数Stage
请求参数:
{
…
“ImageURI”: “/tmp/BIOS.hpm”, // 固件URI
“Stage”: true // 表征当前固件不升级,仅暂存
…
}
响应参数:保持不变,使用Task进行返回
| 参数 | 类型 | 取值 | 可选/必选 | 备注 |
|---|---|---|---|---|
| Stage | boolean | true/false | 可选 | 指示固件是否暂存,暂存后可通过“FirmwareInventory”资源的“Activate”操作进行激活(见评审点二) |
并行升级支持固件暂存
URI: /redfish/v1/UpdateService/Actions/Oem/Huawei/UpdateService.ParallelUpdate
操作类型:POST
操作权限: BasicSetting
变更类型:请求中新增请求参数,参数为标准属性Stage
请求参数:
{
“Packages”:[
{
…
“ImageURI”: “/tmp/BMC.hpm”, // 固件URI
“Stage”: false // 表征当前固件升级
…
},
{
“ImageURI”: “/remote/sftp://remote/BIOS.hpm”, // 固件URI
“Stage”: true // 表征当前固件不升级,仅暂存
…
}
]
}
响应参数:保持不变,使用 Task / SubTasks 进行返回
| 参数 | 类型 | 取值 | 可选/必选 | 备注 |
|---|---|---|---|---|
| Stage | boolean | true/false | 可选 | 指示固件是否暂存,暂存后可通过“FirmwareInventory”资源的“Activate”操作进行激活(见评审点二) |
评审点二 Redfish提供激活生效暂存固件的接口
详细描述
URI: /redfish/v1/UpdateService/Actions/UpdateService.Activate
操作类型:POST
操作权限: BasicSetting
变更类型:新增标准 Action 资源
请求参数:
{
“Targets”:[
{
“@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/CPLD.hpm”, // 缓存固件URI
},
{
“@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/BIOS.hpm”, // 缓存固件URI
}
]
}
响应参数:
成功:HTTPCode:202,按照 Task/SubTask 进行返回
失败:
如果是找不到激活生效的固件URI:HTTPCode:400 (Invalid Request)
如果激活生效失败:HTTPCode:500,返回 Redfish 错误消息(按照实际情况返回)
评审点三 Redfish提供弃用暂存固件的接口
详细描述
URI: /redfish/v1/UpdateService/Actions/Oem/{OemIdentifier}/UpdateService. DiscardStagedFirmwares
操作类型:POST
操作权限: BasicSetting
变更类型:新增OEM Action 资源
请求参数:
{
“Targets”:[
{
“@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/CPLD.hpm”, // 缓存固件URI
},
{
“@odata.id”: “/redfish/v1/UpdateService/FirmwareInventory/BIOS.hpm”, // 缓存固件URI
}
]
}
响应参数:
成功:HTTPCode:202,按照 Task/SubTask 进行返回
失败:
如果是找不到暂存的固件URI:HTTPCode:400 (Invalid Request)
如果弃用暂存失败:HTTPCode:500,返回 Redfish 错误消息(按照实际情况返回)
评审点四 Redfish提供查询暂存固件接口
详细描述
URI: /redfish/v1/UpdateService/FirmwareInventory/:FirmwareId
操作类型:GET
操作权限:ReadOnly
变更类型:响应中新增标准属性参数Staged
请求参数:保持现状
响应参数:
{
…
“SoftwareId”: “BIOS-BIOS”, // 固件的唯一标识
“Staged”: true // 表征当前固件是否为暂存固件
…
}
| 参数 | 类型 | 取值 | 备注 |
|---|---|---|---|
| Staged | boolean | true/false | 当前固件是否为暂存固件 |
评审点五 Redfish提供查询允许暂存的固件的接口
详细描述
URI: /redfish/v1/UpdateService/UpdateServiceCapabilities
操作类型:GET
操作权限:ReadOnly
变更类型:新增标准资源
请求参数:无
响应参数:
{
"@odata.type": "#UpdateServiceCapabilities.v1_0_0.UpdateServiceCapabilities",
"Id": "UpdateServiceCapabilities",
"Name": "Update Service Capabilities",
"AllowableStaging": [
"/redfish/v1/Managers/BMC",
"/redfish/v1/Systems/437XR1138R2"
],
"@odata.id": "/redfish/v1/UpdateService/UpdateServiceCapabilities"
}
| 参数 | 类型 | 取值 | 备注 |
|---|---|---|---|
| AllowableStaging | array (string) | - | 当前支持暂存的固件设备 |
评审结论
通过,具体结论如下:
- 同意 Redfish Action
/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate请求中增加参数Stage,表征当前升级的固件是否暂存,可选参数,默认值为 false - 同意 Redfish Action
/redfish/v1/UpdateService/Actions/Oem/Huawei/UpdateService.ParallelUpdate请求 Packages 中的每个元素增加参数Stage,表征当前升级的固件是否暂存,可选参数,默认值为 false - 同意 Redfish 新增 Action
/redfish/v1/UpdateService/Actions/Oem/{OemIdentifier}/UpdateService. DiscardStagedFirmwares,表征弃用已经暂存的固件,接口操作类型为 POST,操作权限为 BasicSetting;请求参数为 Targets,是弃用的固件 FirmwareInventory 资源的具体链接;响应参数为 Task/SubTask - 同意 Redfish 资源
/redfish/v1/UpdateService/FirmwareInventory/:FirmwareId中新增标准属性Staged,属性类型为 boolean,表征当前资源表征的固件是否是暂存固件 - 同意新增 Redfish 标准资源
/redfish/v1/UpdateService/UpdateServiceCapabilities,对应资源版本为 v1.0;资源下新增属性AllowableStaging,属性类型为 array(string),表征支持暂存固件的设备资源
遗留问题
无