背景
很多固件的升级会影响业务运行,客户在升级前会进行很多准备工作,且升级次数是有限的。
如果固件升级是,因为升级条件不具备、升级通道故障等导致升级失败,会导致客户升级前准备工作浪费,对客户的影响较大。
如果BMC提供升级前的检查接口,客户在升级准备工作前就可以做一下勘探,勘探到升级前检查有失败时,优先处理失败,这样就可以有效减少实际升级失败的影响。
关联ISSUE
暂无
整体方案
1.由固件管理提供统一接口,支持升级前预检查
2.提供固件管理和下层升级组件在升级前预检查期间交互的信号和更新检查结果的方法以及预检查使用的相关属性
评审点 新增升级前预检查所需资源协作接口属性、方法和信号
- 新增资源协作接口方法
PrepareUpdateCheck,用于触发升级前预检查 - 新增资源协作接口信号
PrepareUpdateSignal,固件管理发送升级前预检查信号给下层升级组件 - 新增资源协作接口属性
PrepareUpdateResult,表示升级前预检查状态
详细描述
资源协作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 |
| 说明 | 用于固件管理发送升级前预检查 |
新增属性:PrepareUpdateResult
资源协作path: /bmc/kepler/UpdateService/FirmwareInventory/:Id (原有)
资源协作interface: bmc.kepler.UpdateService.FirmwareInfo (原有)
变化类型:新增属性
属性名称:PrepareUpdateResult
应用场景:
- 组件启动或在升级前预检查触发时,固件管理更新所有固件的PrepareUpdateResult为Unknown,表示升级前预检查结果未知
- 下层升级组件在收到信号之后更新对应固件的PrepareUpdateResult为InProgress表示正在升级前预检查中
- 下层升级组件在检查完之后,更新对应固件的PrepareUpdateResult为Success/Failed ,表示升级前预检查结果
| 项 | 说明 |
|---|---|
| 属性名称 | 属性名称:PrepareUpdateResult |
| 属性类型 | 字符串 |
| 属性读写 | 读写 |
| 属性权限 | R:ReadOnly W:BasicSetting |
| 属性广播 | false |
| 属性值来源 | 升级前预检查结束后,由下层升级组件更新检查结果 |
| 默认值 | Unknown |
| 持久化 | 否 |
| 属性说明 | 升级前预检查结果,取值: Unknown(未检查 初始状态) InProgress(正在检查中 预检查任务正在运行,轮询查询时返回该值) Success (检查结果OK,全部预检查项通过,允许继续升级) Failed (检查结果为失败,预检查不通过,禁止发起升级) |
评审结论
1、同意新增UpdateService资源协作接口的方法PrepareUpdateCheck,信号PrepareUpdateSignal
2、同意新增FirmwareInfo 资源协作接口的属性PrepareUpdateResult
遗留问题
- 采用 Signal 的方式进行预检查,如果下游检查组件收不到信号如何处理?
结论:信号下发后,固件管理检查PrepareUpdateResult是否修改为非Unknown状态,超时时间为被修改时,则重新下发信号。