bingo gen后删除了service.lua的register_ipmi_cmd函数

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

问题描述

我看代码中会调用到此函数,这儿为什么会删除register_ipmi_cmd,

[在这里详细描述您遇到的问题]

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2606

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

不做删除

实际结果

每次生成都会删除

尝试过的解决方案

无

分析结论

无

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

{
  "sections": [
    {
      "title": "总结",
      "content": "`bingo gen` “删除” `register_ipmi_cmd` 是因为**未配置 `codegen_policy` 或版本过低**。通过在 `service.json` 中显式设置 `version: 15` 即可解决。请确保不要手动修改生成的 `gen/` 文件,所有自定义逻辑应放在非自动生成的代码文件中。"
    }
  ]
}
点击此处查看详细分析解答

根据您提供的上下文信息,bingo gen 生成代码后 register_ipmi_cmd 函数被删除或缺失,根本原因在于默认的代码生成策略(codegen_policy)版本较低,或者文件中未配置此项,导致自动生成逻辑跳过了该函数的生成。


具体原因

  1. 默认 codegen_policy 缺失或版本较低
    通过 bingo new 创建的组件,其 mds/service.json 中默认不包含 codegen_policy 定义。此时 bingo gen 会使用一个较低版本(或无版本)的策略,该策略不会生成 register_ipmi_cmd 函数。
    相关文档块1中“长江计算_胡迪”指出:

    “在组件mds的service.json中新增codegen_policy的定义,配置version 15,再执行bingo gen,就可以自动生成register_ipmi_cmd的定义。”

  2. 代码覆盖机制
    bingo gen 会在 gen/app/service.lua 等路径下全量覆盖生成所有文件。如果之前您在该文件中手动添加了 register_ipmi_cmd 函数,再次执行 bingo gen 后,新生成的代码(不包含该函数)会直接覆盖原有文件,导致手写函数“被删除”。

  3. Codegen Policy 版本差异
    codegen_policy 的不同版本对应不同的代码生成规则。版本 15 是一个已知能够生成 register_ipmi_cmd 的版本(文档块1中确认)。版本 20 则用于解决其他特定问题(如电源状态检测,来自实体CodeGenPolicy Version 20)。您当前使用的版本(若无显式配置)可能低于 15,因此不包含 IPMI 注册函数。


解决方案:配置 codegen_policy 版本

在组件 mds/service.json 文件中添加 codegen_policy 字段,并设置 version 为 15(或更高版本,如 20 以获取最新优化)。示例配置如下(来自文档块1中LiJiang的回复):

{
    "name": "your_app_name",
    "version": "0.0.1",
    "codegen_policy": {
        "version": 15
    }
}

添加后,重新执行 bingo gen,即可在 gen/app/service.lua 中自动生成类似以下函数:

function your_app:register_ipmi_cmd(ipmi_cmd, cb)
    -- ...
end

注意事项

  • 不要手动修改自动生成的 gen/ 目录下的文件,因为每次 bingo gen 会覆盖它们。所有的自定义业务代码应写在 src/lualib/ 或 app.lua 等非生成文件中。
  • 如果你希望保留某些自动生成逻辑的定制化修改,可以调整 codegen_policy 版本(如升级到 20)或等待 CICD SIG 社区发布更详细的版本说明(文档块1中张雨博提到:“后续会把codegen_policy的版本说明公示出来”)。
  • 当前已知版本 15 可以生成 register_ipmi_cmd,版本 20 则用于其他功能优化,请根据实际需求选择合适的版本。

总结

bingo gen “删除” register_ipmi_cmd 是因为未配置 codegen_policy 或版本过低。通过在 service.json 中显式设置 version: 15 即可解决。请确保不要手动修改生成的 gen/ 文件,所有自定义逻辑应放在非自动生成的代码文件中。

先检查下mds/ipmi.json文件是否存在,文件中cmds字段是否包含ipmi命令定义,文件格式是否正确

修改过ipmi.json吗,可以贴下bingo gen的日志

没改过,直接生成就这样

codegen_policy的Version改成19

Version,V应该小写