定制化redfish的post的空响应体失败问题分析
更新时间: 2026/06/02
在Gitcode上查看源码

问题背景

  • 单板类型:Atlas 800I A3;
  • 软件版本:openubmc 2512_lts;
  • 涉及功能:redfish,收集日志,task;
  • 触发条件:现在需要实现一个无参POST接口/redfish/v1/Managers/1/LogServices/Actions/Oem/openUBMC/CollectNPULog,执行该接口操作。
  • 业务表现:预期返回值200时响应体为空,返回值非200时返回错误信息;实际返回值200时响应体非空。

问题复现步骤

postman下发post接口/redfish/v1/Managers/1/LogServices/Actions/Oem/openUBMC/CollectNPULog,请求体为空,确认返回的响应体。

关键日志信息

定位过程

  1. 尝试GetMessageId用Script,直接return lua_nil,发现不起作用;
  2. RspBody能直接用Formula调脚本里面的函数rsp_postprocess,发现不起作用;
  3. 参考Redfish定制指南写的CTCC/src/plugins/redfish/custom_request_response.lua影响到了所有的redfish请求的返回体,但是实际只需要定制特定的几个URL的请求的返回体,不是所有的;
  4. 确认修改响应体的位置,尝试修改;

问题原因

redfish接口组件代码的RspBody中缺失需要增加返回200的空白响应体的代码及缺失lua处理响应体文件。

解决方案

需要在当前代码中添加风扇在位状态及是否位双胞胎风扇的判断,风扇不在位的情况下,level中填入NA或者N/A,而不是写入风扇列表结构体中的风扇转速信息。具体修改如下:

接口的RspBody中增加ctcc_remove_action_format: 新增文件src/plugins/redfish/custom_request_response.lua,内容如下: CMakeLists.txt中增加install命令: