【已评审】新增主备管理资源协作接口

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.Statusbmc.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

@spjisgood_2lbdb 当前帖子评审之前需要关闭以下问题:

问题1:评审点1中修复笔误问题,突出推荐方案,以及属性名称说明中补充CSR配置的属性的默认值
问题2:Remote 资源中缺少对应的主备状态等基本属性,需要补齐;属性CSR配置中去掉对应的示例,由整体对象示例进行承载
问题3:私有对象 SwitchOverRule 建议上资源树,后续演进对于主备切换场景支持北向接口展示以及社区/产业的动态调整

根据评审中提出的问题,现做如下修改

  1. StatusIntervalMS 命名无法体现主备状态
    更改: 属性名修改为ActiveMonitorIntervalMS
  2. HeatbeatStatus描述存在歧义,且暂无周边消费,无上资源协作接口的必要
    更改: 此属性改为私有属性