ISSUE
评审背景
需求分析
-
BMC要支持框式设备的管理,在框式设备中一般存在多个节点,多个节点上的BMC有主备关系。因此BMC需要新增主备管理功能,需要提供资源协作接口用于支持查询/倒换主备状态。
-
每个BMC上需要抽象出两类对象:本端BMC和远端BMC。每个BMC都需要体现BMC的唯一标识、主备状态等基本信息,以及节点之间通信需要的端口/地址配置。其中 BMC的唯一标识用于在初始状态下指定哪个BMC为主的场景。
评审点
评审点1:新增 本端BMC 主备管理资源
path(新增): /bmc/kepler/Managers/:ManagerId/ActiveStandby/Local
interface(新增): 2个,分别如下:
- 接口1:
bmc.kepler.Managers.ActiveStandby.Status,属性如下:
| 属性名称 | 数据类型 | 读写权限 | 持久化 | 信号 | 说明 |
|---|---|---|---|---|---|
| ActiveStatus | y | 只读 R:ReadOnly |
否 | 是 | 描述:当前BMC的主备状态 数据源:内部更新 取值范围1: Active 0: Standby 默认值:0 |
| CommunicationStatus | y | 只读 R:ReadOnly |
否 | 是 | 描述:当前BMC的通信状态 数据源:内部更新 取值范围:1: 正常 0: 中断 默认值:1 |
- 接口2:
bmc.kepler.Managers.ActiveStandby.Local
新增属性如下:
| 属性名称 | 数据类型 | 读写权限 | 持久化 | 信号 | 说明 |
|---|---|---|---|---|---|
| Id | y | 只读 R:ReadOnly |
否 | 否 | 描述:唯一标识,用于标识主备管理BMC 数据源:产业配置 取值范围:0~255 默认值:0 |
| ActiveAllowed | b | 只读 R:ReadOnly |
否 | 否 | 描述:当前BMC是否允许切换为主 数据源:内部更新 取值范围:true: 允许 false: 禁止 默认值:false |
| StandbyAllowed | b | 只读 R:ReadOnly |
否 | 否 | 描述:当前BMC是否允许切换为备 数据源:内部更新 取值范围:true: 允许 false: 禁止 默认值:false |
新增方法如下:
| 项目 | 说明 |
|---|---|
| 方法名 | SwitchStatus |
| 方法描述 | 切换主备方向 |
| 权限 | BascSetting |
| 请求签名 | y |
| 请求说明 | Status:切换目标状态(取值:0:Standby 1:Active) |
| 响应签名 | – |
| 响应说明 | 切换成功无响应内容,失败则抛出错误引擎异常 |
- 私有属性如下:
| 属性名称 | 数据类型 | 持久化 | 说明 |
|---|---|---|---|
| Presence | y | 否 | 描述:BMC所在硬件板卡在位状态 数据源:CSR配置 取值范围:1: 在位 0: 不在位 默认值:1 |
| Address | s | 否 | 描述: BMC节点之间通信的地址 数据源:CSR配置 |
| Port | q | 否 | 描述:BMC节点之间通信的端口 数据源:CSR配置 默认值:51000 |
配置示例
"ActiveStandbyLocal_0": {
"Id": 1,
"Presence": "#/Object.Presence",
"Address": "192.168.100.114",
"Port": 52000
}
评审点二:新增 远端BMC 主备管理资源
path(新增): /bmc/kepler/Managers/:ManagerId/ActiveStandby/Remotes/:RemoteId
interface(新增): 2个,分别如下:
-
接口1:
bmc.kepler.Managers.ActiveStandby.Status,属性同 本端BMC 主备管理资源 -
接口2:
bmc.kepler.Managers.ActiveStandby.Remote, 属性如下:
| 属性名称 | 数据类型 | 读写权限 | 持久化 | 信号 | 说明 |
|---|---|---|---|---|---|
| Id | y | 只读 R:ReadOnly |
否 | 否 | 描述:唯一标识,用于标识主备管理BMC 数据源:产业配置 取值范围:0~255 |
- 私有属性如下:
| 属性名称 | 数据类型 | 持久化 | 说明 |
|---|---|---|---|
| Presence | y | 否 | 描述:BMC所在硬件板卡在位状态 数据源:CSR配置 取值范围:1: 在位 0: 不在位 默认值:1 |
| Address | s | 否 | 描述:BMC节点之间通信的地址 数据源:CSR配置 |
| Port | q | 否 | 描述:BMC节点之间通信的端口 数据源:CSR配置 默认值:51000 |
配置示例
"ActiveStandbyRemote_0": {
"Id": 2,
"Presence": "#/Object.Presence",
"Address": "192.168.100.114",
"Port": 52000
}
评审点三:新增 主备BMC切换条件资源
背景
- 场景1:对于单板存在导致无法继续作为主设备进行管理的情况,比如严重告警
- 场景2:对于特定的场景无法执行BMC的主备倒换,比如PSU的升级场景
在特定的条件下,BMC的主备状态必须进行主动切换,或者禁止切换,需要通过统一的模型进行定义和支撑产业配置,因此需要增加 主备BMC切换条件模型资源。
约束: 当多个条件同时满足时禁止条件的优先级高于主动切换的优先级
path(新增): /bmc/kepler/Managers/:ManagerId/ActiveStandby/SwitchRules/:Id
interface(新增): bmc.kepler.Managers.ActiveStandby.SwitchRule,属性如下:
| 属性名称 | 类型 | 读写权限 | 持久化 | 信号 | 说明 |
|---|---|---|---|---|---|
| RuleType | y | 只读 R:ReadOnly |
否 | 否 | 描述:切换条件类型 数据源:产业配置 取值范围: 0: BMC主动切换的触发条件 1: BMC被动切换的禁止条件 默认值:0 |
| Threshold | u | 只读 R:ReadOnly |
否 | 否 | 描述:当前主备切换条件的门限值 数据源:产业配置 默认值:1 |
| Reading | u | 读写 R:ReadOnly W:ReadOnly |
否 | 否 | 描述:当前主备切换条件的输入值 数据源:产业配置 默认值:0 |
| Enabled | b | 读写 R:ReadOnly W:BasicSetting |
否 | 否 | 描述:是否使能当前主备切换条件 数据源:产业配置 默认值:true |
| Operator | y | 只读 R:ReadOnly |
否 | 否 | 描述:当前主备切换条件的运算符 数据源:产业配置 取值范围: 1:小于 2:小于等于 3:大于 4:大于等于 5:等于 6:不等于 默认值:5 |
| Direction | y | 只读 R:ReadOnly |
否 | 否 | 描述:切换条件类型配置为0时表示BMC主动切换的主备方向,配置为1时表示被动切换时被禁止的主备方向 数据源:产业配置 取值范围: 0:降备 1:升主 默认值:0 |
| Description | s | 只读 R:ReadOnly |
否 | 否 | 描述:当前主备切换条件匹配之后的描述信息,表示BMC发生主动切换或者被动切换禁止的原因 数据源:产业配置 默认值:“” |
配置示例
"SwitchOverRule_0": {
"RuleType": 1,
"Threshold": 1,
"Reading": "<=/Scanner_CPLD1.Value",
"Operator": 5,
"Enabled": true,
"Direction": 0,
"Description": "CPLD Validating"
}
评审点四:新增 BMC主备服务 管理私有类 ActiveStandbyService
背景
BMC主备服务需要读取主备管理相关的一系列硬件信号,以及辅助BMC主备服务需要的属性。当前属性全部采用私有的方式进行管理。具体属性如下:
| 属性名称 | 类型 | 持久化 | 说明 |
|---|---|---|---|
| DefaultActiveId | y | 否 | 描述:默认单板的标识,与主备对象的Id对应 数据源:CSR配置 取值范围:0~255 默认值:1 |
| StandbyToActiveWrite | y | 否 | 描述:升主写入硬件信号对象 数据源:CSR配置 |
| ActiveToStandbyWrite | y | 否 | 描述:降备写入硬件信号对象 数据源:CSR配置 |
| StandbyToActiveWriteProtect | y | 否 | 描述:升主写保护硬件信号对象 数据源:CSR配置 |
| ActiveToStandbyWriteProtect | y | 否 | 描述:降备写保护硬件信号对象 数据源:CSR配置 |
| HeartbeatWrite | y | 否 | 描述:当前BMC主备心跳写入硬件信号对象 数据源:CSR配置 |
| HealthStatus | y | 否 | 描述:当前BMC健康状态读取信号对象 数据源:CSR配置 |
| ActiveRead | y | 否 | 描述:当前BMC主备状态读取硬件信号对象 数据源:CSR配置 |
| BoardFullySeated | y | 否 | 描述:单板插稳状态读取信号对象,如果没有则和在位信号保持一致即可 数据源:CSR配置 |
| HeartbeatIntervalMS | u | 否 | 描述:当前BMC主备心跳检测周期,单位:ms 数据源:CSR配置 取值范围: 不小于10 默认值:300 |
| HeartbeatTimeoutMS | u | 否 | 描述:当前BMC主备心跳检测间隔的超时时间,单位:ms 数据源CSR配置 取值范围:不小于500 默认值:3000 |
| ActiveMonitorIntervalMS | u | 否 | 描述:当前BMC主备检测间隔,单位:ms 数据源:CSR配置 取值范围: 不小于50 默认值:200 |
配置示例
"ActiveStandbyService_0": {
"DefaultActiveId": 1, # 默认框内1号BMC为主BMC
"StandbyToActiveWrite": "#/Accessor_ToActive.Value",
"ActiveToStandbyWrite": "#/Accessor_ToStandby.Value",
"StandbyToActiveWriteProtect": "#/Accessor_ToActivePro.Value",
"ActiveToStandbyWriteProtect": "#/Accessor_ToStandbyPro.Value",
"HeartbeatWrite": "#/Accessor_Heartbeat.Value",
"HealthStatusRead": "#/Scanner_Health.Value",
"ActiveRead": "#/Scanner_Active.Value",
"BoardFullySeatedRead": "#/Scanner_BoardSeated.Value",
"HeartbeatIntervalMS": 300,
"HeartbeatTimeoutMS": 3000,
"StatusIntervalMS": 200
}
评审点五:新增错误引擎 ForceFailoverError
背景
主备倒换失败时(例如redfish接口)需要展示异常信息,资源协作接口调用失败时抛出
| 项目 | 值 |
|---|---|
| 错误引擎标识 | ForceFailoverError |
| 变化类型 | 新增 |
| 错误描述 | An error occurred during the force failover process. |
| 错误消息 | An error occurred during the force failover process. Details: %1. |
| 参数类型 | string |
| 处理建议 | Locate the cause based on error information, rectify the fault, and submit the request again. |
| 严重程度 | Warning |
| HTTPCode | 400 |
| IPMICode | 不涉及 |
| SNMPCode | 不涉及 |
示例
"ForceFailoverError": {
"Description": "An error occurred during the force failover process.",
"Message": "An error occurred during the force failover process. Details: %1",
"Severity": "Warning",
"NumberOfArgs": 1,
"ParamTypes": [
"string"
],
"Resolution": "Locate the cause based on error information, rectify the fault, and submit the request again.",
"HttpStatusCode": 400,
"IpmiCompletionCode": "0xFF",
"SnmpStatusCode": 5,
"TraceDepth": 0
}
评审结论
- 评审点1:通过,同意新增资源协作接口
bmc.kepler.Managers.ActiveStandby.Status和bmc.kepler.Managers.ActiveStandby.Local,以及对应属性(见评审点);同意新增资源路径/bmc/kepler/Managers/:ManagerId/ActiveStandby/Local以及私有属性(见评审点) - 评审点2:通过,同意新增资源协作接口
bmc.kepler.Managers.ActiveStandby.Remote以及对应属性(见评审点);同意新增资源路径/bmc/kepler/Managers/:ManagerId/ActiveStandby/Remotes/:RemoteId以及私有属性(见评审点) - 评审点3:通过,同意新增资源协作接口
bmc.kepler.Managers.ActiveStandby.SwitchRule以及对应属性(见评审点);同意新增资源/bmc/kepler/Managers/:ManagerId/ActiveStandby/SwitchRules/:Id - 评审点4:通过,同意新增 BMC主备服务 管理私有类
ActiveStandbyService以及私有属性(见评审点) - 评审点5:通过,同意新增错误引擎
ForceFailoverError