ISSUE链接
需求1:
【需求】支持BMC的热复位-mdb_interface-GitCode
需求2:
【需求】支持复位锁定rpc接口-mdb_interface-GitCode
需求一 支持BMC的 warm reset 接口
背景
需要支持 ipmi 的热复位(Warm Reset)。热复位是一种轻量级复位机制,其核心目的是清理设备及其通信接口的内部状态。其关键特性有以下几点:保留配置参数,即不重置中断使能、阈值、地址等预设配置;重置通信状态,即清除通信接口的临时状态数据,如序列号、会话状态等;不会触发自检。
方案
flowchart LR
A[开始] --> B(ipmi_core发送热复位命令)
B --> C(maca调用WarmReset方法)
C --> D(各组件执行Action方法,并返回结果(成功/失败)给maca)
D --> E(maca输出完成热复位的日志,列出热复位异常的组件)
E --> F[结束]
决策点
新增接口 bmc.kepler.MicroComponent.Reset,接口内新增方法 Prepare、Action 、Cancel
bmc.kepler.SystemControl接口下新增方法 WarmReset
详细描述
1. 已有接口增加新方法:
path: /bmc/kepler/MacaService(已有)
interface: bmc.kepler.SystemControl(已有)
methods: WarmReset(新增)
| 项目 | 说明 |
|---|---|
| 方法名称 | WarmReset |
| 方法描述 | 热复位BMC的接口 |
| 方法权限 | BasicSetting |
| 请求签名 | 无 |
| 请求参数 | 无 |
| 响应签名 | 无 |
| 响应参数 | 无 |
2. 新增接口及方法 :
interface: bmc.kepler.MicroComponent.Reset(新增)
methods: Prepare(新增)、Action(新增)、Cancel(新增)
| 项目 | 说明 |
|---|---|
| 方法名称 | Prepare |
| 方法描述 | 用于组件重置准备 |
| 方法权限 | BasicSetting |
| 请求签名 | s |
| 请求参数 | ResetType 重置类型。参数类型为String。取值范围:“WarmReset”,代表热复位类型 |
| 响应签名 | i |
| 响应参数 | ResultCode:int32 返回业务组件热复位准备阶段结果 SUCCESS(0),FAIL(-1) |
| 项目 | 说明 |
|---|---|
| 方法名称 | Action |
| 方法描述 | 执行组件重置 |
| 方法权限 | BasicSetting |
| 请求签名 | s |
| 请求参数 | ResetType 重置类型。参数类型为String。取值范围:“WarmReset”,代表热复位类型 |
| 响应签名 | i |
| 响应参数 | ResultCode:int32 返回业务组件热复位执行结果 SUCCESS(0),FAIL(-1) |
| 项目 | 说明 |
|---|---|
| 方法名称 | Cancel |
| 方法描述 | 取消重置 |
| 方法权限 | BasicSetting |
| 请求签名 | s |
| 请求参数 | ResetType 重置类型。参数类型为String。取值范围:“WarmReset”,代表热复位类型 |
| 响应签名 | 无 |
| 响应参数 | 无 |
需求二 支持复位锁定rpc接口
背景(必填,文字描述议题背景,如需求来源、问题场景)
在VRD 生效过程中(general_hardware组件)或者是BIOS 处于post阶段(bios组件)下,BMC禁止复位,此时如果进行rollback操作,会重复调用GracefulReset接口,导致刷复位失败日志。主要原因就是A组件禁止复位时,B组件无法感知,因此,需要框架提供能力统一管理复位锁定场景及组件、原因等信息,并支持组件查询当前是否复位锁定;
决策点
接口 bmc.kepler.SystemControl 下新增属性 ResetLockStatus 及方法 SetResetLockStatus
方案
flowchart LR
A[开始] --> B(组件对复位发起锁定)
B --> C{是否处于锁定状态}
C -->|是| F
C -->|否| E[修改锁定状态属性值]
E --> F[将该组件记录到发起锁定的表中]
F --> G[结束]
flowchart LR
A[开始] --> B(组件对复位锁定发起解除)
B --> C{是否处于锁定状态}
C -->|是| D{查看记录表中该组件是否曾发起锁定}
C -->|否| H
D -->|是| E(将该组件从记录表中移除)
D -->|否| H
E --> F{判断记录表中是否仍有组件}
F -->|否| G(修改锁定状态属性值)
F -->|是| H
G --> H[结束]
详细描述
1. 新增属性及方法:
path: /bmc/kepler/MacaService (原有)
interface: bmc.kepler.SystemControl (原有)
properties: ResetLockStatus (新增)
methods: SetResetLockStatus(新增)
2. 新增属性:ResetLockStatus
新增属性:ResetLockStatus
| 项目 | 说明 |
|---|---|
| 属性名称 | ResetLockStatus |
| 属性类型 | s |
| 取值范围 | “Unlocked”, “WarmResetLocked”, “GracefulResetLocked”, “ForceResetLocked” |
| 属性读写 | 只读 |
| 属性权限 | ReadOnly |
| 变化通知 | false |
| 持久化 | 否 |
| 属性说明 | 复位锁定状态。包括未锁定、热复位请求锁定、平滑复位请求锁定、强制复位请求锁定四种状态。热复位、平滑复位、强制复位的优先级由低到高,高级别的复位被锁定的状态下,禁止执行低级别的复位操作。 |
3. 新增方法:SetResetLockStatus
| 项目 | 说明 |
|---|---|
| 方法名称 | SetResetLockStatus |
| 方法权限 | BasicSetting |
| 请求签名 | ssu |
| 请求参数 | 1. ResetMode,表示复位类型。String 类型。“WarmReset” 代表热复位, “GracefulReset” 代表平滑复位级别(锁定操作时,对平滑复位和热复位均进行锁定),“ForceReset” 代表强制复位级别(锁定操作时,对强制复位、平滑复位和热复位均进行锁定)。 2. OperationType,表示操作类型。String 类型。取值范围为"Lock" / “Unlock”,分别代表加锁、解锁。 3. TimeoutSeconds,表示超时时间,单位为秒,仅在执行锁定操作时参数有效。U32类型。当应用组件设置复位锁定后超过指定超时时间未解锁,则自动解除对应应用组件的复位锁定状态。取值范围为10~300。 |
| 响应签名 | 无 |
| 响应参数 | 无 |
请求参数 |1. ResetMode,表示复位类型。String 类型。“WarmReset” 代表热复位, “GracefulReset” 代表平滑复位级别(锁定操作时,对平滑复位和热复位均进行锁定),“ForceReset” 代表强制复位级别(锁定操作时,对强制复位、平滑复位和热复位均进行锁定)。
2. OperationType,表示操作类型。String 类型。取值范围为"Lock" / “Unlock”,分别代表加锁、解锁。
3. TimeoutSeconds,表示超时时间,单位为秒,仅在执行锁定操作时参数有效。uint32类型。当应用组件设置复位锁定后超过指定超时时间未解锁,则自动解除对应应用组件的复位锁定状态。取值范围为10~300。|
|响应签名 | 无 |
|响应参数 | 无 |
4. 异常场景
当进行复位锁定后,若调用复位接口,将抛出如下错误信息 (非新增,复用已有的错误消息):
“OperationNotAllowed”: {
“Description”: “Operation not allowed under present configuration for given payload type.”,
“Message”: “Operation not allowed under present configuration for given payload type.”,
“Severity”: “Warning”,
“NumberOfArgs”: 0,
“Resolution”: “Check the operation.”,
“TraceDepth”: 0,
“HttpStatusCode”: 400,
“IpmiCompletionCode”: “0x81”
}
评审结论
1、同意接口 bmc.kepler.SystemControl 新增如下属性及方法
- 新增属性 ResetLockStatus,表示复位锁定状态,签名为s,只读,读权限ReadOnly,不发送变化通知事件
- 新增方法 SetResetLockStatus,设置复位锁定状态,请求签名为ssu,无响应签名,权限为BasicSetting
- 新增方法WarmReset,执行warm reset,无请求签名和响应签名,权限为BasicSetting
2、同意新增接口 bmc.kepler.MicroComponent.Reset 以及如下方法
- 新增方法 Prepare,用于组件重置准备,请求签名为s,相应签名为i,权限为BasicSetting
- 新增方法 Action ,执行组件重置,请求签名为s,相应签名为i,权限为BasicSetting
- 新增方法 Cancel,取消重置,请求签名为s,无响应签名,权限为BasicSetting
遗留问题:
- 热复位新增接口 bmc.kepler.MicroComponent.Reset 下需补充 Prepare 方法和 Cancel 方法
—— 已补充 - 支持复位锁定rpc接口 新增方法 SetResetLockStatus 的请求参数名称 ResetType 需修改为 ResetMode
—— 已修改 - 支持复位锁定rpc接口 异常场景需要确认错误消息参数是否可以和北向保持一致。
—— 已确认,ResetOperationNotAllowed 的参数无法和北向保持一致,需将错误提示修改为已有的OperationNotAllowed