扩展对外接口的时候,按时手册增加redfish的/redfish/v1/OpenUBMC ,编译报错

在/home/workspace/manifest/rackmount下面使用bingo build --stage=stable的命令编译,报错如下。请帮忙指点一下,谢谢

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

:white_check_mark: 结论

您的构建失败是由于 新增 Redfish 接口后未配置对应的 PrivilegeMap 权限 所致。

:white_check_mark: 根本解决方案
privilege_map_config.json 中为 /redfish/v1/OpenUBMC 添加权限声明。

:warning: 切勿长期屏蔽 MapperChecker 权限校验,否则会影响代码合规性和安全性。

完成上述配置后,即可成功通过 bingo build 构建流程。

点击此处查看详细分析解答

扩展 Redfish 接口 /redfish/v1/OpenUBMC 编译报错问题分析与解决

根据您提供的信息,您在扩展 Redfish 外部接口时新增了路径 /redfish/v1/OpenUBMC,并在执行 bingo build --stage=stable 时遇到编译失败。错误日志中明确指出了问题根源:

红字警告提示:

[Rule 6.1]: redfish接口PrivilegeMap校验检查失败,错误值:NULL,错误位置:URI:NULL, Type:NULL, location:NULL
映射器配置检查失败,构建终止

同时提示:

若要在不配置PrivilegeMap的情况下个人出包,请用在MapperChecker中注释check_privilege_map的方法进行屏蔽
特殊资源请在privilege_map_config.json文件中手动声明资源类型

:magnifying_glass_tilted_left: 问题定位

虽然您已按文档创建了接口映射配置文件 OpenUBMC.json,但构建系统在校验阶段因缺少权限映射(PrivilegeMap)而拒绝通过

核心原因

新增 Redfish 接口 /redfish/v1/OpenUBMC 后,必须在 privilege_map_config.json 文件中声明该接口的访问权限级别,否则 MapperChecker 校验会失败,导致 bingo build 构建中断。

这是一套安全机制,确保所有 Redfish 接口都有明确的访问控制策略(如读、写、执行等操作所需的权限角色),防止未经授权的访问。


:white_check_mark: 解决方案

:white_check_mark: 正确做法:为新接口添加 PrivilegeMap 权限配置

步骤 1:确认 privilege_map_config.json 文件位置

该文件通常位于:

interface_config/redfish/privilege_map_config.json

请检查是否存在此文件,若不存在,请从主分支同步或创建。

步骤 2:编辑 privilege_map_config.json,添加新接口权限

在文件中找到对应的权限结构(通常是按 URI 路径映射权限),添加如下条目:

{
  "Uri": "/redfish/v1/OpenUBMC",
  "Privileges": {
    "GET": ["ConfigureManager", "Login"]
  }
}

:white_check_mark: 说明:

  • GET 请求需要登录权限和配置管理权限。
  • 可根据实际需求调整权限等级,常见如:Login, ConfigureManager, ConfigureComponents 等。
  • 若为写操作(POST/PUT/PATCH),需添加如 "POST": ["ConfigureManager"] 等更高权限。

示例完整片段:

[
  {
    "Uri": "/redfish/v1",
    "Privileges": {
      "GET": ["Login"]
    }
  },
  {
    "Uri": "/redfish/v1/Managers",
    "Privileges": {
      "GET": ["Login"],
      "PUT": ["ConfigureManager"]
    }
  },
  // ➕ 新增以下内容
  {
    "Uri": "/redfish/v1/OpenUBMC",
    "Privileges": {
      "GET": ["Login", "ConfigureManager"]
    }
  }
]

:warning: 注意:确保 JSON 格式合法(逗号、引号、括号匹配)。


:red_exclamation_mark:临时绕过方案(仅用于开发调试)

如果您只是想临时绕过校验以完成本地打包,可按提示操作:

若要在不配置PrivilegeMap的情况下个人出包,请用在MapperChecker中注释check_privilege_map的方法进行屏蔽

操作方式(不推荐长期使用):

  1. 找到 MapperChecker 工具代码(一般位于 bmcgobingo 工具链内部)。
  2. 搜索 check_privilege_map 方法。
  3. 在调用处用 #// 注释掉该方法调用。

:warning: 风险:绕过权限校验可能导致安全隐患或后续合入主干被拒。仅限个人调试使用。


:open_file_folder: 验证文件结构和内容

:white_check_mark: OpenUBMC.json 内容验证(您已基本正确)

{
  "Resources": [
    {
      "Uri": "/redfish/v1/OpenUBMC",
      "Interfaces": [
        {
          "Type": "GET",
          "RspBody": {
            "@odata.id": "/redfish/v1/OpenUBMC",
            "Id": "OpenUBMC",
            "Name": "OpenUBMC",
            "WelcomeMessage": "${ProcessingFlow[1]/Destination/WelcomeMessage}"
          },
          "ProcessingFlow": [
            {
              "Type": "Property",
              "Path": "/bmc/demo/MyMDSModel/1",
              "Interface": "bmc.demo.OpenUBMC.Community",
              "Destination": {
                "WelcomeMessage": "WelcomeMessage"
              }
            }
          ]
        }
      ]
    }
  ]
}

:check_mark: 您的配置基本正确,但请确保 ProcessingFlow 索引与实际一致(目前使用 [1],但数组只有 一个元素 [0])→ 存在错误!

:hammer_and_wrench: 修复建议:修正 ProcessingFlow 引用索引

应改为:

"WelcomeMessage": "${ProcessingFlow[0]/Destination/WelcomeMessage}"

否则运行时可能无法正确解析变量,导致响应体字段为空。


:white_check_mark: 最终正确步骤总结

步骤 操作
1 确保 OpenUBMC.json 放在 interface_config/redfish/mapping_config/ 目录下
2 修改 privilege_map_config.json,添加 /redfish/v1/OpenUBMC 的权限定义
3 修正 OpenUBMC.json${ProcessingFlow[1]} → 改为 [0]
4 提交所有更改(git add .
5 重新运行构建命令:bingo build --stage=stable

:link: 参考文档


:white_check_mark: 结论

您的构建失败是由于 新增 Redfish 接口后未配置对应的 PrivilegeMap 权限 所致。

:white_check_mark: 根本解决方案
privilege_map_config.json 中为 /redfish/v1/OpenUBMC 添加权限声明。

:warning: 切勿长期屏蔽 MapperChecker 权限校验,否则会影响代码合规性和安全性。

完成上述配置后,即可成功通过 bingo build 构建流程。

在tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json中增加了接口,搞定

root@f4985a3ffe1a:/home/workspace/manifest/rackmount# git diff tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
diff --git a/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json b/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
index b92e1d16..03ac06ca 100644
— a/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
+++ b/tools/mapper_check/PrivilegeMapUriChecker/privilege_map_config.json
@@ -112,6 +112,11 @@
“/redfish/v1/Schemas/{id}”: {
“Flag”: “Pass”,
“Reason”: “Schema<84><90><8D><9C><80><81><85><8D>”

  •    },
    
  •    "/redfish/v1/OpenUBMC": {
    
  •        "Flag": "Add",
    
  •        "Entity": "Manager",
    
  •        "Reason": "Custom OpenUBMC resource, mapped to Manager privileges"
       }
    

    }
    -}
    \ No newline at end of file
    +}
    root@f4985a3ffe1a:/home/workspace/manifest/rackmount#