合并受阻
欢迎来到 openUBMC 社区
Hey @qq_44402975 , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。
联系指引
有疑问可以联系 SIG: sig-interface ,
维护者是: @DataSculptor, @WeliveWelove, @aaronlee, @huanghan ,
优秀贡献者是: @L_Ling, @PLUS_ONE, @yelvsub .


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


/check-issue


/ai review


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


| 任务名称 | 结果 |
|---|---|
| pre-commit检查 | ❌FAILED |
| 防投毒检查 | ✅SUCCESS |
| 开源合规检查 | ✅SUCCESS |
| 编译构建 | ✅SUCCESS |
| ipmi修改 | ✅SUCCESS |
| 修改行数检查 | ✅SUCCESS |
| AI Review | ✅SUCCESS |


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) |
发现的问题
- [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 传递给倒换目标。 - [major][D15] Web StandbyList 缺少 SyncStatus 字段 — 设计 1.1 表格及示例中 StandbyList 成员为
{Index, Present, SyncStatus}三字段;web_backend/plugins/orchestrator/active_standby_mgmt.lua的get_standby_list只输出 Index/Present。若 D-Bus 侧暂无同步状态数据源,也请在设计/PR 描述中明确该字段延后,避免接口文档与实现不一致。 - [major][D17] CLI 正常回显与设计不符 — 设计 2.2 明确正常回显为
Change current board status successful.,本 PR 改为Success(cli/echoes/ipmcset/_failover)。评审结论仅涉及"错误描述信息格式对齐",成功回显变更未在设计文档体现。请补充设计更新或恢复设计文案。 - [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=在位)。 - [major→建议修复][D24] pcall 判空不符合仓库惯例,存在 nil 索引崩溃风险 — 仓库惯例为
if ok and obj then(本 PR 的 cli 版本 :45 也是这么写的),但:redfish/plugins/utils.luais_has_active_and_standby:if ok then local state = obj.ActiveStatus— get_object 成功返回 nil 时崩溃;web_backend/.../active_standby_mgmt.luaget_active_index/get_standby_list:在检查ok之前直接访问status_obj.ActiveStatus— 同样风险(对板不在位时该路径可达)。
建议统一改为if ok and status_obj then。
- [⚠️][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。 - [minor][D25] 文件格式 —
cli/echoes/ipmcset/_failover丢失结尾换行(目录内其余 echo 文件均以 \n 结尾,回显后可能不换行);web_backend 新增两个文件均缺 EOF 换行。CI pre-commit FAILED 可能与此相关,请本地跑 pre-commit。 - [minor][D25] 常量风格 —
cli/plugins/orchestrator/active_standby_mgmt.lua:17local PRESENT = 1缺<const>(同文件其余常量均有)。 - [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 分钟)


当前PR是否有AI参与:
[x] 否
[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :
PR功能描述 / 为什么需要这个合入:
修改方案:
验证方案:
测试建议:
自验证报告:
该PR关联的issue
(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #
希望检视人员了解: