背景
框式设备主备管理板场景下,管理板之间需要跨板 RPC 通讯。跨板 RPC 存在多条通讯链路时,根据链路状态切换链路需要同步更新链路地址,消费方(如 bmc_datasync)取址建链。对端为多块单板时,每块单板各有一个通讯地址。
框式设备管理板首页需要显示整框单板概览信息,包含高度、宽度、健康等级、产品名称;并支持按单板查询风扇 FanId、健康与转速。
框内节点对象已在 Interface 评审通过:【已评审】新增资源协作接口提供获取框内节点信息能力(bmc.kepler.AggregationService.Blade)。在该接口上:
| 能力 | 方案 |
|---|---|
| RPC 通讯地址 | 新增 RpcAddress,一板一地址(该单板的 RPC 通讯 IPv4) |
| 与节点板通讯状态 | 新增 CommunicationStatus |
| 单板概览 | 新增 Height、Width、Health、ProductName |
| 风扇信息 | 新增方法 GetFanInfo(无入参;出参本板风扇数组:FanId / Health / Speed) |
| 代发 Redfish | 新增方法 SendRedfishRequest(Method / Uri / Body / IfMatch;目标板由本 Blade 路径实例决定,无 AggregationSource 入参) |
关联 ISSUE
无
整体方案
产业组件实现 Rpc 通讯链路的状态检测和异常切换;检测到当前链路异常时切换通讯链路,更新资源树 Rpc 通讯地址属性,通知消费组件刷新通讯地址。
对于单板静态信息和高频获取信息,汇聚到管理板,避免接口调用时实时获取,提升接口响应速率。
评审点
- 1. 变更资源协作接口
bmc.kepler.AggregationService.Blade
1. 新增属性RpcAddress
2. 新增属性CommunicationStatus(与节点板通讯状态)
3. 新增属性Height、Width、Health、ProductName
4. 新增方法GetFanInfo
5. 新增方法SendRedfishRequest
详细描述
评审点1:变更资源协作接口 bmc.kepler.AggregationService.Blade
变更描述:已有资源树接口下新增属性和方法。
接口评审链接:topic/7454
path(已有):/bmc/kepler/AggregationService/Aggregates/${AggregateId}/ChassisService/Blades/${BladeId}
interface(变更):bmc.kepler.AggregationService.Blade
新增属性
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 访问权限 | 属性来源 | 持久化类型 | 易变属性 |
|---|---|---|---|---|---|---|---|---|
| 新增 | RpcAddress | s | false | true | Read: ReadOnly;Write: ConfigureComponents | 软件维护 | 不持久化 | true |
| 新增 | CommunicationStatus | s | true | true | Read: ReadOnly | 软件维护 | 不持久化 | true |
| 新增 | Height | y | true | true | Read: ReadOnly | 软件维护 | 不持久化 | true |
| 新增 | Width | y | true | true | Read: ReadOnly | 软件维护 | 不持久化 | true |
| 新增 | Health | s | true | true | Read: ReadOnly | 软件维护 | 不持久化 | true |
| 新增 | ProductName | s | true | true | Read: ReadOnly | 软件维护 | 不持久化 | true |
属性描述与变更影响
- RpcAddress:与该单板 RPC 通讯的 IPv4 地址;空串表示未配置或未就绪。切平面时仅更新本属性(Port 不变)。本板可写;对板经跨板 RPC Set 本属性以对齐。变更发变化通知。新增 RW 属性,支撑跨板 RPC Set;多单板各实例独立;消费方订阅变更跟随切平面。
- CommunicationStatus:管理板与该节点板的通讯状态。默认
Suspended。取值:Suspended=未使能,Running=正常,Exception=框内通讯异常。由链路/心跳检测刷新,发变化通知。供汇聚/告警/同步门控判断对板是否可达。 - Height:单板高度(U),类型 U8。对标框级单板概览 / AssetBoard.Height。用于框级拓扑/UI 展示。
- Width:单板宽度,类型 U8。对标 AssetBoard.Width。用于框级拓扑/UI 展示。
- Health:单板健康等级,类型 String。取值:
Normal/Minor/Major/Critical/Unknown。默认Unknown。用于框级拓扑/UI 与告警展示。 - ProductName:产品/单板展示名。查询响应
a(ssa{sv})中字典外 ProductName 取自本属性(若尚未随 7454 闭环,本次一并纳入)。
新增方法
| 方法名称 | 请求签名 | 响应签名 | 访问权限 |
|---|---|---|---|
| GetFanInfo | (无) | aa{sv} | ReadOnly |
| SendRedfishRequest | ssss | iss | ConfigureComponents |
GetFanInfo
无入参。在本 Blades/${BladeId} 实例上调用,返回该单板全部风扇信息(单板可有多个风扇,故为数组)。出参采用 aa{sv} 字典数组,便于后续扩展风扇其他字段;本期必选键如下,消费方应忽略未知键。
响应参数(Fans:aa{sv},本期必选键)
| 键 | 类型 | 说明 |
|---|---|---|
| FanId | s | 风扇标识 |
| Health | s | 健康状态:Normal / Minor / Major / Critical / Unknown(默认 Unknown) |
| Speed | u | 转速(RPM) |
方法描述:查询本板风扇 FanId、健康与转速;无风扇时返回空数组。字典后续可增键,不改方法签名。
SendRedfishRequest — 请求参数
| 参数 | 类型 | 说明 |
|---|---|---|
| Method | s | HTTP 方法:GET / POST / PATCH / PUT / DELETE |
| Uri | s | 本板上 Redfish 路径(如 /redfish/v1/Systems/1);须为绝对 path,不含 scheme/host |
| Body | s | 请求体(JSON 文本;GET/DELETE 无体时传空串) |
| IfMatch | s | 对应 HTTP If-Match;无条件请求时传空串 |
SendRedfishRequest — 响应参数
| 参数 | 类型 | 说明 |
|---|---|---|
| StatusCode | i | 目标 Redfish HTTP status(2xx 成功);不可达映射 503 |
| Body | s | 响应体原文(可空) |
| ETag | s | 响应 ETag(无则空串),便于调用方后续带 IfMatch |
方法描述:在本 Blades/${BladeId} 实例上调用,目标单板由路径确定,不再传 AggregationSource。经内部 RPC/链路向该节点 BMC 代发 Redfish 并回传结果。不替代各业务专用汇聚方法;用于通用/OEM 透传。
变更信号
无(属性侧依赖 emitsChangedSignal:RpcAddress / CommunicationStatus / Height / Width / Health / ProductName)。
变更接口影响
| 路径 | 变更接口影响 | CSR配置影响 | 持久化影响 | 其他影响 |
|---|---|---|---|---|
| /bmc/kepler/AggregationService/Aggregates/${AggregateId}/ChassisService/Blades/${BladeId} | 新增属性 RpcAddress、CommunicationStatus、Height、Width、Health、ProductName;新增方法 GetFanInfo、SendRedfishRequest | 不涉及重名属性,无影响 | 均不持久化(含 RpcAddress);无影响 | 需实现上树、写路径(仅 RpcAddress)、变化通知、通讯状态刷新、GetFanInfo、SendRedfishRequest;主备两侧已具备 AggregationService/Blade |
是否准备好 AI 预审
是