已开启
feat: 支持主备管理北向接口适配 #1493
malfoy创建于 12 天前
feat: 支持主备管理北向接口适配 #1493
已开启
malfoy创建于 12 天前
malfoy
malfoy
12 天前

当前PR是否有AI参与:

[x] 否

[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :

PR功能描述 / 为什么需要这个合入:

修改方案:

验证方案:

测试建议:

自验证报告:

该PR关联的issue

(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #

希望检视人员了解:

likedislike
合并受阻
openUBMC-robotopenUBMC-robot成员
12 天前 将WeliveWelove,DataSculptor,huanghan,aaronlee设为审查人
openUBMC-robotopenUBMC-robot成员
12 天前 添加了label:sig/sig-interface
openUBMC-robot
openUBMC-robot成员
12 天前 评论:

欢迎来到 openUBMC 社区

Hey @qq_44402975 , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 说明文档论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册

联系指引

有疑问可以联系 SIG: sig-interface ,
维护者是: @DataSculptor, @WeliveWelove, @aaronlee, @huanghan ,
优秀贡献者是: @L_Ling, @PLUS_ONE, @yelvsub .

likedislike
openUBMC-robotopenUBMC-robot成员
12 天前 添加了label:openUBMC-cla/yes
openUBMC-robot
openUBMC-robot成员
12 天前 评论:

CLA 签署成功

qq_44402975, 感谢您的代码贡献。 所有的代码贡献者都已完成了 CLA 签署。 👍

likedislike
openUBMC-robotopenUBMC-robot成员
12 天前 添加了label:needs-issue
openUBMC-robot
openUBMC-robot成员
12 天前 评论:

关联 Issue 通知

@qq_44402975 , 提交的PR需要关联issue,指导链接:https://forum.openubmc.cn/t/topic/208
如果已经关联了issue, 但是needs-issue标签仍然存在,你可以在评论 /check-issue 来移除它。

likedislike
malfoymalfoy
12 天前 关联了issue:[需求]: 支持主备管理的北向接口
malfoy
malfoy
12 天前 评论:

/check-issue

likedislike
openUBMC-robot
openUBMC-robot成员
12 天前 评论:

/ai review

likedislike
atomgit-bot
atomgit-bot成员
12 天前 评论:

代码审查

✅ 未发现问题

likedislike
openUBMC-robot
openUBMC-robot成员
12 天前 评论:

The pipeline(pipeline number:1988) is running. >>> Check Pipeline <<<.Please wait a moment...

likedislike
openUBMC-robotopenUBMC-robot成员
12 天前 添加了label:ci-running
openUBMC-robotopenUBMC-robot成员
12 天前 删除了label:ci-running
openUBMC-robot
openUBMC-robot成员
12 天前 评论:
任务名称结果
pre-commit检查❌FAILED
防投毒检查✅SUCCESS
开源合规检查✅SUCCESS
编译构建✅SUCCESS
ipmi修改✅SUCCESS
修改行数检查✅SUCCESS
AI Review✅SUCCESS
likedislike
openUBMC-robotopenUBMC-robot成员
12 天前 添加了label:ci-failed
zhaotianli成员
12 天前 评论:

PR #1493 Code Review: feat: 支持主备管理北向接口适配

仓库: openUBMC/rackmount
分支: cli → main
关联设计: topic 5975(评审结论:同意统一错误描述格式、接口与其他产业对齐)

变更概览

文件 变更 说明
interface_config/web_backend/mapping_config/BMCSettings/ActiveStandbyMgmt.json 新增 Web 查询主备状态 + 倒换接口
interface_config/web_backend/plugins/orchestrator/active_standby_mgmt.lua 新增 Web 侧业务逻辑
interface_config/redfish/mapping_config/Managers/Actions.json +88 ForceFailover Action + ActionInfo
interface_config/redfish/mapping_config/Managers/Managers.json +22/-2 Status.State 动态化 + Actions 挂接
interface_config/redfish/plugins/orchestrator/managers.lua +9 get_active_status 映射
interface_config/redfish/plugins/utils.lua +26 is_has_active_and_standby
interface_config/cli/ipmcset/ActiveStandbyMgmt.json +13/-3 CLI 倒换命令参数化
interface_config/cli/plugins/orchestrator/active_standby_mgmt.lua +2/-2 远端在位判断改用 Presence
interface_config/cli/echoes/ipmcget/_redundancy、ipmcset/_failover 修改 回显格式调整
interface_config/redfish/.../PrivilegeMap/PrivilegeMap.json +14 ForceFailover 权限
CHANGELOG.md / mds/service.json 版本 1.110.127 ✓

逐项 Review

维度 结果 说明
D14 路径与资源类型 URI 层级与设计一致;ActionInfo.v1_0_1 与既有 17 处一致
D15 属性一致性 Web StandbyList 缺 SyncStatus(问题 2)
D16 关联结构 #Manager.ForceFailover target/@Redfish.ActionInfo 挂接正确
D17 操作与语义 CLI 新增必选 -v id 未被使用(问题 1);回显与设计不符(问题 3)
D18 Header/并发 不涉及
D19 权限 PrivilegeMap POST ForceFailover → ConfigureComponents 与设计 3.2 一致
D20 异步任务 Redfish 倒换返回 TaskId(Task 响应)符合设计;Web/CLI 同步无 Task 符合设计
D21 兼容/边界 ⚠️ State 动态化的存量兼容风险(问题 6)
D22 数组索引 Managers.json GET 新步骤为第 30 步(末尾追加,[30] 引用正确,既有 [1]-[29] 不受影响);Actions/cli/web 各 Flow 的 [1][2][3] 均正确指向 Status→ActiveStatus、Remotes→RemoteIdPaths
D23 Switch Formula 不涉及 本 PR 无 Switch Formula
D24 接口一致性 Presence 属性存疑(问题 4);判空不符合仓库惯例(问题 5)
D25 通用质量 ⚠️ 版本/CHANGELOG 同步 ✓、JSON 语法 ✓;换行与常量风格(问题 7/8)

发现的问题

  1. [major][D17] CLI 必选参数 id 声明后从未使用interface_config/cli/ipmcset/ActiveStandbyMgmt.json:12-22 新增 Usage: ipmcset -d failover -v <id> 且 ReqBody 声明 id 为必选 integer,但整个 ProcessingFlow 未引用 ReqBody.id,SwitchStatus 方法硬编码 Params: [0](:54-60)。设计 2.2 命令为 ipmcset -d failover、无请求参数。用户被强制输入一个被忽略的值。建议:删掉 ReqBody/Usage 的 -v <id>,或真正将 id 传递给倒换目标。
  2. [major][D15] Web StandbyList 缺少 SyncStatus 字段 — 设计 1.1 表格及示例中 StandbyList 成员为 {Index, Present, SyncStatus} 三字段;web_backend/plugins/orchestrator/active_standby_mgmt.luaget_standby_list 只输出 Index/Present。若 D-Bus 侧暂无同步状态数据源,也请在设计/PR 描述中明确该字段延后,避免接口文档与实现不一致。
  3. [major][D17] CLI 正常回显与设计不符 — 设计 2.2 明确正常回显为 Change current board status successful.,本 PR 改为 Successcli/echoes/ipmcset/_failover)。评审结论仅涉及"错误描述信息格式对齐",成功回显变更未在设计文档体现。请补充设计更新或恢复设计文案。
  4. [major][D24] obj.Presence 属性存在性存疑cli/plugins/orchestrator/active_standby_mgmt.lua:46 将远端在位判断由"对象存在即在位"改为 obj.Presence == 1(读取 bmc.kepler.Managers.ActiveStandby.Status 接口),但设计依赖表中 Local/Remote 接口仅列出 ActiveStatus、CommunicationStatus。该接口定义不在本仓库,无法验证 Presence 是否存在;若不存在,ipmcget -d redundancy 所有对板将恒显示 Not Present(功能回归)。请确认 kepler 侧接口确有 Presence 属性(1=在位)。
  5. [major→建议修复][D24] pcall 判空不符合仓库惯例,存在 nil 索引崩溃风险 — 仓库惯例为 if ok and obj then(本 PR 的 cli 版本 :45 也是这么写的),但:
    • redfish/plugins/utils.lua is_has_active_and_standbyif ok then local state = obj.ActiveStatus — get_object 成功返回 nil 时崩溃;
    • web_backend/.../active_standby_mgmt.lua get_active_index/get_standby_list:在检查 ok 之前直接访问 status_obj.ActiveStatus — 同样风险(对板不在位时该路径可达)。
      建议统一改为 if ok and status_obj then
  6. [⚠️][D21] Managers State 动态化的存量兼容Managers.json:106 将 State 由固定 "Enabled" 改为 GetActiveStatus;当 /bmc/kepler/Managers/1/ActiveStandby/Local 对象不存在(非主备形态或服务未就绪)时 ActiveStatus=nil → State=Absent,存量环境 GET /redfish/v1/Managers/{id} 行为由 Enabled 变为 Absent。请确认所有形态都会部署 ActiveStandby 服务,否则 nil 时应回退 Enabled
  7. [minor][D25] 文件格式cli/echoes/ipmcset/_failover 丢失结尾换行(目录内其余 echo 文件均以 \n 结尾,回显后可能不换行);web_backend 新增两个文件均缺 EOF 换行。CI pre-commit FAILED 可能与此相关,请本地跑 pre-commit。
  8. [minor][D25] 常量风格cli/plugins/orchestrator/active_standby_mgmt.lua:17 local PRESENT = 1<const>(同文件其余常量均有)。
  9. [info] 代码重复is_has_active_and_standby 在 cli/redfish/web 三处重复实现,后续可考虑收敛到公共插件。

总结

结论:部分一致。D22 数组索引、权限映射、Task 语义、URI 结构等核心框架均正确,Web/Redfish 主体实现与设计相符。但有 4 个 major 设计一致性问题需处理:CLI 无效必选参数(问题 1)、Web 缺 SyncStatus(问题 2)、回显文案偏离设计(问题 3)、Presence 属性存疑(问题 4);另有 nil 判空崩溃风险(问题 5)建议一并修复。请关联 issue(当前带 needs-issue 标签)并解决 ci-failed 后再合入。


⏱️ 本 PR 检视耗时:564.8 秒(约 9.4 分钟)

likedislike
wangjian成员11 天前进行代码检视1
interface_config/redfish/mapping_config/Managers/Actions.json
@@ -1525,0 +1583,4 @@
1583+ "ProcessingFlow": [
1584+ {
1585+ "Type": "Property",
1586+ "Path": "/bmc/kepler/Managers/1/ActiveStandby/Local",
wangjian11 天前评论:

新增代码中出现硬编码实例 ID(/Managers/1),应使用动态段引用。

likedislike
wangjian成员11 天前进行代码检视1
mds/service.json
@@ -2,3 +2,3 @@
22 "name": "rackmount",
33 "type": "configuration",
4- "version": "1.110.126",
4+ "version": "1.110.127",
wangjian11 天前评论:

本次变更涉及北向接口(资源/属性/请求体参数)新增或修改,但 PR 未附社区评审帖链接。

likedislike