【问题求助】web资产清单raid卡的页面部件编码不显示

// 此模板仅供参考,如果不适用可以修改

问题描述

web资产清单页面部件编码不显示,但在系统信息-其他界面可以显示

环境信息

  • 软件版本:OpenUBMC2512 LTS SP1

重现步骤

image

尝试过的解决方案

rackmount中看到调用以下接口,但没有在开源组件找到实现,想了解下资产清单界面的这些数据来源分别是什么

                    "ProcessingFlow": [
                        {
                            "Type": "Method",
                            "Path": "/bmc/kepler/AssetService/AssetList",
                            "Interface": "bmc.kepler.AssetService.AssetList",
                            "Name": "GetAssetList",
                            "Destination": {
                                "List": "List"
                            }
                        }
                    ]

答案内容由AI生成,仅供参考:

总结

结论 说明
:check_mark: 根本原因 资产清单页面未正确获取或渲染 PartNumber 字段,可能因白名单限制、前端绑定缺失或服务聚合问题导致
:check_mark: 数据源正确性 系统底层(如frudata)已具备该信息,可在“系统信息”页面验证
:check_mark: 推荐排查顺序 1. 抓包分析API返回数据
2. 使用IPMI/Redfish验证FRU数据完整性
3. 检查开源组件实现完整性
点击此处查看详细分析解答

Web资产清单页面部件编码不显示问题分析与解决方案

问题描述

在使用OpenUBMC2512 LTS SP1版本的Web管理界面时,资产清单页面中的“部件编号”字段大量显示为空(显示为“N/A”),但相同设备在“系统信息 → 其他”界面中却可以正常显示该信息。

例如:

  • PCIe RAID卡(MegaRAID 9540-8i)在资产清单中“部件编号”为空
  • 内存模块和网卡等设备也存在同样问题
  • 但在“系统信息”页面中,这些设备的部件编码(如0603Y007)却能正确展示

这表明系统底层已采集到相关数据,但Web资产清单页面未能正确渲染或获取对应字段


环境信息

项目 详情
软件平台 OpenUBMC2512 LTS SP1
管理界面 Web UI(BMC Web)
涉及模块 资产管理、AssetService、FRU数据管理

数据来源分析

根据提供的上下文信息及技术架构,以下是对各字段数据来源的技术解析:

1. 部件编号(Part Number)的数据来源

部件编号来源于设备的 FRU(Field Replaceable Unit)信息,具体路径如下:

  • 通过 ipmiRedfish 接口读取设备 EEPROM 中存储的电子标签信息
  • 数据由 frudata 组件统一解析并注入 D-Bus 资源树
  • 在 D-Bus 中对应接口:bmc.kepler.FrudataService.Frudata
  • 具体字段映射示例(来自知识库):
    "Fru_Expander": {
      "FruName": "ExpBoard{Slot}",
      "Type": 50,
      "SerialNumber": "80AD012324879964EE",
      "PcbVersion": ".A"
    }
    
  • Web前端通过 REST 或 Redfish 接口获取后填充页面

:magnifying_glass_tilted_left: 关键点:若设备未正确上报 PartNumber,则默认初始化为 "N/A"(如文档chunk中所述)


2. 资产清单页面的数据获取逻辑

资产清单页面调用的核心接口是:

GET /bmc/kepler/AssetService/AssetList
→ D-Bus Interface: bmc.kepler.AssetService.AssetList
→ Method: GetAssetList()

该接口从以下两个主要服务聚合数据:

数据源 提供信息 相关组件
frudata 服务 序列号、部件号、厂商、PCB版本等 bmc.kepler.FrudataService
Components 服务 设备类型、名称、健康状态等 bmc.kepler.Systems.Components

:white_check_mark: 注意SN/BN 数据来源说明中明确指出:

  • 数据源自 Component 对象中的 SerialNumberPartNumber
  • 若字段为空,则不显示

3. 系统信息 vs 资产清单的差异原因

虽然两者数据均来自同一底层资源,但存在以下差异:

比较项 系统信息页面 资产清单页面
数据路径 直接访问设备资源节点 经过 AssetService 汇总处理
实现方式 可能绕过部分缓存机制 依赖完整的数据同步链路
异常处理 更宽容,支持回退显示 严格依赖字段非空判断
显示策略 手动配置映射或调试视图 自动化模板渲染

:backhand_index_pointing_right: 因此可能出现:“系统信息能见,资产清单不见”的现象——说明是中间处理环节丢失了PartNumber字段映射


可能原因分析

原因 说明 验证方法
:white_check_mark: PartNumber未写入FRU EEPROM 硬件出厂时未烧录部件号 使用 ReadElabelData 命令检查EEPROM内容
:warning: Web前端未映射PartNumber字段 接口返回了数据但前端未绑定 抓包分析 /GetAssetList 返回是否包含partNumber字段
:cross_mark: AssetService未从frudata拉取完整数据 聚合服务遗漏字段 查看 AssetService 日志或代码逻辑
:repeat_button: 数据刷新延迟或缓存未更新 上电后数据未完全加载 重启 BMC 或手动触发资产发现
:hammer_and_wrench: 开源组件缺失实现 如用户所提,开源版本中 AssetList 接口无实现 检查开源分支中是否存在完整AssetService插件

解决方案建议

:white_check_mark: 方案一:验证底层数据是否完整(优先执行)

使用 IPMI 命令读取 FRU 数据:

ipmitool fru print <fru_id>

查看输出中是否有 Product Part Number 字段。

使用 Redfish API 查询:

GET https://<bmc_ip>/redfish/v1/Chassis/1/Assembly

或:

GET https://<bmc_ip>/redfish/v1/Chassis/1/Components/<component_id>

检查返回 JSON 中是否存在 PartNumber 字段。


:white_check_mark: 方案二:检查 Web 前端数据接口返回内容

打开浏览器开发者工具(F12),监控资产清单页面发起的请求:

  • 请求地址示例:/UI/Rest/Asset/GetAssetList
  • 查看响应数据中是否包含 partNumber 字段
  • 若有数据但页面未显示 → 前端模板绑定错误
  • 若无数据 → 后端服务未传递字段

:pushpin: 参考线索:文档chunk中提到“只有两种model的卡才会去获取PartNumber”,说明可能存在白名单机制过滤了部分设备


:white_check_mark: 方案三:确认白名单机制是否存在

检查系统是否存在如下逻辑控制:

<!-- 可能存在于 web_custom.xml 或 CSR 配置中 -->
<EnablePartNumberForModels>
    <Model>MegaRAID 9540-8i</Model>
    <Model>XC333</Model>
</EnablePartNumberForModels>

或代码中类似判断:

if (model == "MegaRAID 9540-8i" || model == "XC333") {
    fetchPartNumber = true;
}

:white_check_mark: 方案四:启用调试日志分析服务链路

查看 AssetServicefrudata 日志:

journalctl -u frudata.service
journalctl -u assetservice.service

重点关注:

  • 是否成功收到 FRU 数据
  • GetAssetList 是否包含 partNumber 字段输出
  • 是否存在字段映射报错日志

:white_check_mark: 方案五:手动测试字段写入(仅测试环境)

使用 IPMI 写入测试部件号:

ipmitool fru edit <id> field p 3 "TEST-PART-NUMBER"

然后刷新资产清单页面,观察是否更新。


临时规避措施

  1. 通过“系统信息 - 其他”页面查看部件编码
  2. 使用 SSH 登录 BMC,执行命令查看:
    i2cread -f <device>      # 读取I2C设备数据
    ipmcget -d fruinfo        # 获取FRU信息
    
  3. 使用 Redfish API 替代 Web 页面进行资产导出

总结

结论 说明
:check_mark: 根本原因 资产清单页面未正确获取或渲染 PartNumber 字段,可能因白名单限制、前端绑定缺失或服务聚合问题导致
:check_mark: 数据源正确性 系统底层(如frudata)已具备该信息,可在“系统信息”页面验证
:check_mark: 推荐排查顺序 1. 抓包分析API返回数据
2. 使用IPMI/Redfish验证FRU数据完整性
3. 检查开源组件实现完整性

建议后续优化

  1. 统一数据展示逻辑:确保“资产清单”与“系统信息”使用相同数据源和服务接口
  2. 增强容错机制:即使部分字段缺失,也应允许其他字段正常显示
  3. 开放配置开关:允许用户自定义哪些设备类型需要加载 PartNumber
  4. 完善文档说明:明确资产数据采集规则和限制条件

:loudspeaker: 建议反馈至开发团队:将此问题提交为已知缺陷(Known Issue),并在下一版本中修复 AssetServicefrudata 的字段同步问题。

可以根据下面的hardware_sig结论修改
【待评审】网卡partnumber、serialnumber更新优先级顺序 - Hardware SIG / Hardware评审 - openUBMC 论坛

根据你图中的部件编码0603Y007 我在vpd仓中没搜索到 ,可能是pcie_device组件从pci空间获取的
看下raid卡对应的PCIeCard对象的PartNumber是否是0603Y007 ,如果是的话 对于博通卡 无法从带外和frudata获取PartNumber的
建议把CSR中Controller对象的BOMNumber使用同步语法 ,同步PCIeCard的PartNumber属性,这样应该可以解决你的问题