已开启
fix: 支持SSU定位灯控制(Redfish/Web) #1505
huangminghao创建于 8 天前
fix: 支持SSU定位灯控制(Redfish/Web) #1505
已开启
huangminghao创建于 8 天前
huangminghao成员
8 天前

interface-sig评审贴:

当前PR是否有AI参与:

[x] 是
__1. Agent平台信息: Trae
__2. 模型信息: Claude
__3. Prompt摘要: 按两份接口评审贴定位灯结论,结合component_drivers仓ssu_card.sr南向契约(Led_SSUUID为CPLD UID灯位直控,仅支持闪烁/关闭)与chassis仓SetState/主从控制实现,调整SSU定位灯Redfish/Web北向映射

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

SSU模组定位灯经Redfish/Web北向控制:南向为bmc.kepler.Systems.Led的SetState(chassis仓实现,含主从控制)。SSU定位灯硬件仅支持闪烁/关闭,不支持常亮。

修改方案:

  1. redfish/mapping_config/Chassis/Chassis.json:/redfish/v1/Chassis/SSU:id新增LocationIndicatorActive GET/PATCH。PATCH true→SetState(5, 255)(闪烁255秒自动灭,应对硬件无常亮档位),false→SetState(0, 0);GET State映射0→false、5/255→true、其他→null
  2. web_backend/mapping_config/System/SSUs.json(新增):/UI/Rest/System/SSUs列表GET与/SSUs/:id详情GET/PATCH,映射规则同Redfish
  3. plugins/orchestrator/chassis.lua(redfish/web两份):get_ssu_path(GetPath bmc.dev.Chassis Id='SSU'+id)、get_ssu_led_path(GetPath bmc.kepler.Systems.Led Name='SSU'+id+'_UID')、get_ssu_list
  4. schemastore chassis.json:uris新增/redfish/v1/Chassis/SSU:id

验证方案:

  • json语法校验通过;SetState入参(State U8、Interval U8)与mdb_interface bmc.kepler.Systems.Led契约逐字段核对一致
  • 闪烁State=5(LED_BLINK)与chassis仓uid_state一致;255秒interval与chassis仓identify倒计时(interval*10秒后自动关灯)衔接

测试建议:

  • PATCH true后GET应返回true且灯闪烁,255秒后自动关闭;PATCH false立即关闭
  • 不存在的SSU id(IsValidSSUId为false)返回404

自验证报告:

  • 本地json语法校验通过;与评审贴7191/7410定位灯字段命名、URI、boolean语义核对一致

该PR关联的issue:

fixes #

希望检视人员了解:

  1. 代码由AI辅助开发者编写,且开发者已人工逐行核对逻辑、校验功能正确性,且与开发者预期一致;
  2. GET保留255→true兜底(历史常亮值),新设置统一为5(闪烁);SSU定位灯主从控制在chassis仓PR(openUBMC/chassis#94)实现,本PR仅北向映射。
likedislike
合并受阻
Hhuangminghao成员
8 天前 关联了issue:PowerConverter接口Schema文件补充字段定义
openUBMC-robotopenUBMC-robot成员
8 天前 将WeliveWelove,DataSculptor,huanghan,aaronlee设为审查人
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:sig/sig-interface
openUBMC-robot
openUBMC-robot成员
8 天前 评论:

欢迎来到 openUBMC 社区

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

机器人使用手册

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

联系指引

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

likedislike
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:ai-co-authored
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:openUBMC-cla/yes
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:ai-includes-code
openUBMC-robot
openUBMC-robot成员
8 天前 评论:

CLA 签署成功

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

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

关联 Issue 通知

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

likedislike
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:ai-compliance-successful
openUBMC-robot
openUBMC-robot成员
8 天前 评论:

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

likedislike
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:ci-running
openUBMC-robot
openUBMC-robot成员
8 天前 评论:

/ai review

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

代码审查

✅ 未发现问题

likedislike
openUBMC-robotopenUBMC-robot成员
8 天前 删除了label:ci-running
openUBMC-robot
openUBMC-robot成员
8 天前 评论:
任务名称结果
pre-commit检查✅SUCCESS
防投毒检查✅SUCCESS
开源合规检查✅SUCCESS
编译构建✅SUCCESS
ipmi修改✅SUCCESS
修改行数检查✅SUCCESS
AI Review✅SUCCESS
likedislike
openUBMC-robotopenUBMC-robot成员
8 天前 添加了label:ci-successful
Hhuangminghao成员
8 天前 关联了issue:[需求]: 支持ASU模组定位灯控制
wangjian成员7 天前进行代码检视1
interface_config/redfish/mapping_config/Chassis/Chassis.json
@@ -1392,0 +1459,4 @@
1459+ {
1460+ "Type": "Property",
1461+ "Path": "${Statements/GetSSUPath()}",
1462+ "Interface": "bmc.dev.Chassis",
wangjian7 天前评论:

资源协作接口 bmc.dev.Chassis 在 mdb_interface 中未定义(属性/方法须先在社区接口库定义)。

likedislike
wangjian成员7 天前进行代码检视1
interface_config/redfish/mapping_config/Chassis/Chassis.json
@@ -1389,6 +1389,179 @@
13891389 }
13901390 ]
13911391 },
1392+ {
wangjian7 天前评论:

PATCH 的 SetState 调用中,Params 为 ["${Statements/SetLocationIndicatorActiveState()}", 255],即 Interval 固定为 255。但 PR 描述中明确说明'PATCH true→SetState(5, 255)(闪烁255秒自动灭)',且 chassis 仓的 identify 倒计时为 interval10 秒。25510=2550 秒(42.5分钟),与 PR 描述中'闪烁255秒自动灭'不符。PR 描述声称 255 秒,但实际实现为 2550 秒,存在明显的时间语义偏差。

likedislike
zhaotianli成员
2 天前 评论:

PR #1505 Code Review: fix: 支持SSU定位灯控制(Redfish/Web)

仓库: openUBMC/rackmount
分支: feat/ssu-uid-led → main
关联设计: topic 7191(SSU Redfish北向,已评审)、topic 7410(Web/CLI管理SSU,已评审)——本 PR 仅定位灯部分

变更概览

文件 新增行 说明
redfish/mapping_config/Chassis/Chassis.json +173 新增 /redfish/v1/Chassis/SSU:id GET/PATCH
web_backend/mapping_config/System/SSUs.json +168 新增 /UI/Rest/System/SSUs 列表与 :id GET/PATCH
redfish/plugins/orchestrator/chassis.lua +34 get_ssu_path / get_ssu_led_path
web_backend/plugins/orchestrator/chassis.lua +42 get_ssu_path / get_ssu_led_path / get_ssu_list
schemastore .../dmtf/json_schema/chassis.json +2/-1 uris 新增 /redfish/v1/Chassis/SSU:id

逐项 Review

维度 结果 说明
D14 路径/@odata URI、@odata.type(#Chassis.v1_26_0.Chassis)、@odata.id、ChassisType=Module 与设计一致;SSU:id 模板与既有 Expansion:id 模式一致;schemastore uris 已同步(仅 en 目录,无遗漏)
D15 属性一致性 Web 列表 List 元素结构与设计不符(见问题1);详情接口电子标签属性未实现(PR 声明后续交付,见提示2)
D16 关联结构 ChassisCollection Members 经既有 get_chassis_members()(遍历 /bmc/dev 下 bmc.dev.Chassis)自动纳入 SSU,与设计 Members 示例一致
D17 操作与语义 ⚠️ GET/PATCH 齐全、ReqBody boolean、ResourceExist 404 符合设计;但 PATCH Interval 时长语义与 PR 描述矛盾(见问题3)
D19 权限 ⚠️ LockdownAllow: true 与既有定位灯实现不一致(见问题4)
D22 数组索引 ProcessingFlow 确认为 1-based(与既有 GetUIDPath 引用 ProcessingFlow[3] 模式核对一致)。Redfish GET 3 条流引用 [1]/Destination/Id、[2]/Destination/Name、[3]/Destination/State 及 Web GET 单条流引用 [1]/Destination/State 均指向正确步骤;新增资源为独立数组块,不影响既有索引
D23 数据映射 GET↔PATCH 互逆:true↔5、false↔0,255→true 为历史常亮值兜底,default→null 符合设计 boolean,null;Switch case 全覆盖
D24 接口一致性 调用模式与 get_expansion_path/主机定位灯 SetState(State, Interval) + CallIf #WITH 完全一致;但 bmc.dev.Chassis/bmc.dev.Board 需先在 mdb_interface 定义(见问题2)
D25 通用 ⚠️ JSON 语法 CI 通过;CHANGELOG.md 未更新(见问题5)

发现的问题

1.(major,D15/D17)Web SSU 列表 List 元素结构与设计不一致

  • 位置:web_backend/plugins/orchestrator/chassis.lua get_ssu_list(约 122-138 行)+ SSUs.json:9
  • 设计帖 7410 评审点1 明确 List 元素为对象:[{ "SSU": "/UI/Rest/System/SSUs/SSU0" }],而实现返回纯字符串数组 ["/UI/Rest/System/SSUs/SSU0", ...],Web 前端按 item.SSU 取值会得到 undefined。
  • 建议:plugin 中 table.insert(list, { SSU = path })(参考 utils.lua get_fru_list 直接构造对象数组的先例),或在 mapping 中增加 L-Pair 包装步骤。

2.(major,D24)资源协作接口须先在 mdb_interface 社区接口库定义

  • 位置:Chassis.json:1462(bmc.dev.Chassis)、Chassis.json:1470 附近(bmc.dev.Board)
  • 已有检视意见(DataSculptor,未解决)指出 bmc.dev.Chassis 在 mdb_interface 中未定义。补充:GET ProcessingFlow[2] 使用的 bmc.dev.Board 在本仓零先例使用,同样需确认已在 mdb_interface 定义/申报;否则编译或运行期接口校验会失败。
  • 建议:先合入 mdb_interface 接口定义(或在 PR 中说明定义所在仓/PR 链接),并核对 ssu_card.sr 南向是否同时实现 bmc.dev.Chassis(Id)与 bmc.dev.Board(Name)。

3.(major,D17)PATCH Interval=255 的时长语义与 PR 描述矛盾

  • 位置:Chassis.json PATCH SetState Params(约 1548-1552 行)、SSUs.json 同构
  • chassis 仓 identify 倒计时为 interval×10 秒,255 → 2550 秒(42.5 分钟),而 PR 描述与测试建议写的是"闪烁 255 秒自动灭"(已有检视意见指出)。另 PR 描述"false→SetState(0, 0)"与实现 (0, 255) 不符(State=0 时 Interval 无功能影响,但文档应与实现一致)。
  • 建议:与需求方确认预期定位时长后修正 PR 描述/测试建议,或调整 Interval 取值;顺带统一 false 分支描述。

4.(⚠️,D19)LockdownAllow: true 与既有定位灯实现不一致

  • 位置:Chassis.json SSU PATCH(约 1504 行)、SSUs.json PATCH
  • 主机 Chassis 与 Drives 的 LocationIndicatorActive PATCH 均未设置 LockdownAllow(即锁定模式下拒绝),本 PR SSU 定位灯允许锁定模式操作,且设计帖未声明 lockdown 行为。请确认该差异为有意设计。

5.(minor,D25)CHANGELOG.md 未更新

  • 仓库惯例每个功能 PR 均追加条目,本 PR 未更新。

提示项(不阻塞)

  • Web GET /UI/Rest/System/SSUs/:id 缺设计帖的 Manufacturer/SerialNumber/Model/PartNumber(电子标签),Redfish GET 同缺电子标签/PowerState/Status/Drives/NetworkAdapters/Links——PR 已声明仅定位灯部分,请在后续 PR 补齐并在 PR 描述列出交付拆分。
  • SystemId 硬编码为 1,多主机机型是否适用请确认。
  • Redfish GET 边界:SSU Chassis 存在但 Led 对象缺失时(GetSSULedPath 返回空串),ProcessingFlow[3] 的预期行为(返回 null vs 报错)建议补充自验证。

总结

整体结构遵循了仓库既有模式(Expansion:id 路由、GetPath 插件、SetState+CallIf #WITH、1-based 索引、GET↔PATCH 互逆映射),Redfish 侧实现质量较好。综合判定:部分一致——需优先解决 Web 列表结构不符(问题1)与 mdb_interface 接口定义(问题2,已有未决检视意见),并澄清定位时长语义(问题3)后再合入。


⏱️ 本 PR 检视耗时:430.0 秒(约 7.2 分钟)

likedislike