背景
很多固件的升级会影响业务运行,客户在升级前会进行很多准备工作,且升级次数是有限的。
如果固件升级是,因为升级条件不具备、升级通道故障等导致升级失败,会导致客户升级前准备工作浪费,对客户的影响较大。
如果BMC提供升级前的检查接口,客户在升级准备工作前就可以做一下勘探,勘探到升级前检查有失败时,优先处理失败,这样就可以有效减少实际升级失败的影响。
关联ISSUE
暂无
整体方案
1.由固件管理提供统一接口,支持升级前预检查
2.提供固件管理和下层升级组件在升级前预检查期间交互的信号和更新检查结果的方法以及预检查使用的相关属性
评审点 新增升级前预检查所需资源协作接口属性、方法和信号
- 新增资源协作接口方法
PrepareUpdateCheck,用于触发升级前预检查 - 新增资源协作接口信号
PrepareUpdateSignal,固件管理发送升级前预检查信号给下层升级组件 - 新增资源协作接口属性
PrepareUpdateCheckStatus,表示升级前预检查状态
详细描述
资源协作path: /bmc/kepler/UpdateService (原有)
资源协作interface: bmc.kepler.UpdateService (原有)
变化类型:新增方法,新增信号
方法名称:PrepareUpdateCheck
信号名称:PrepareUpdateSignal
应用场景:
- 北向接口调用PrepareUpdateCheck触发升级前预检查,固件管理广播信号PrepareUpdateSignal通知下层升级组件进行升级前预检查
新增方法:PrepareUpdateCheck
| 项 | 说明 |
|---|---|
| 方法名称 | PrepareUpdateCheck |
| 权限 | BasicSetting |
| 请求签名 | NA |
| 请求参数 | NA |
| 响应签名 | u |
| 响应参数 | TaskId 数据类型:U32,任务Id |
| 说明 | 用于升级前预检查 |
新增信号:PrepareUpdateSignal
| 项 | 说明 |
|---|---|
| 方法名称 | PrepareUpdateSignal |
| 权限 | BasicSetting |
| 请求签名 | a{ss} |
| 请求参数 | AdditionalOptions 数据类型:Dictionary,升级前预检查时的可选参数字典,用于升级前预检查时需要信号重发等异常场景传入具体固件信息 |
| 响应签名 | NA |
| 响应参数 | NA |
| 说明 | 用于固件管理发送升级前预检查 |
资源协作path: /bmc/kepler/UpdateService/FirmwareInventory/:Id (原有)
资源协作interface: bmc.kepler.UpdateService.FirmwareInfo (原有)
变化类型:新增属性
属性名称:PrepareUpdateCheckStatus
应用场景:
- 在升级前预检查触发时,固件管理更新所有固件的PrepareUpdateCheckStatus为Init,表示升级前预检查开始
- 下层升级组件在收到信号之后更新对应固件的PrepareUpdateCheckStatus为Running表示正在升级前预检查中
- 下层升级组件在检查完之后,更新对应固件的PrepareUpdateCheckStatus为Completed,表示升级前预检查完毕
新增属性:PrepareUpdateCheckStatus
| 项 | 说明 |
|---|---|
| 属性名称 | PrepareUpdateCheckStatus |
| 属性类型 | 字符串 |
| 属性读写 | 读写 |
| 属性权限 | R:ReadOnly W:BasicSetting |
| 属性广播 | false |
| 属性值来源 | 升级前预检查结束后,由下层升级组件更新 |
| 默认值 | Init |
| 持久化 | 否 |
| 属性说明 | 升级前预检查状态,取值Init(升级前预检查开始)、Running(正在静升级前预检查中)、Completed(升级前预检查完成) |
评审结论
1、同意新增UpdateService资源协作接口的方法PrepareUpdateCheck,信号PrepareUpdateSignal
2、同意新增FirmwareInfo 资源协作接口的属性PrepareUpdateCheckStatus
遗留问题
- 采用 Signal 的方式进行预检查,如果下游检查组件收不到信号如何处理?
结论: