// 此模板仅供参考,如果不适用可以修改
问题描述
我看代码中会调用到此函数,这儿为什么会删除register_ipmi_cmd,
[在这里详细描述您遇到的问题]
环境信息
-
操作系统:Ubuntu 24.04
-
软件版本:OpenUBMC2606
-
硬件配置:[如 CPU、内存等]
重现步骤
-
[第一步]
-
[第二步]
-
[第三步]
期望结果
不做删除
实际结果
每次生成都会删除
尝试过的解决方案
无
分析结论
无
答案内容由AI生成,仅供参考:
{
"sections": [
{
"title": "总结",
"content": "`bingo gen` “删除” `register_ipmi_cmd` 是因为**未配置 `codegen_policy` 或版本过低**。通过在 `service.json` 中显式设置 `version: 15` 即可解决。请确保不要手动修改生成的 `gen/` 文件,所有自定义逻辑应放在非自动生成的代码文件中。"
}
]
}
根据您提供的上下文信息,bingo gen 生成代码后 register_ipmi_cmd 函数被删除或缺失,根本原因在于默认的代码生成策略(codegen_policy)版本较低,或者文件中未配置此项,导致自动生成逻辑跳过了该函数的生成。
默认 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的定义。”
代码覆盖机制
bingo gen 会在 gen/app/service.lua 等路径下全量覆盖生成所有文件。如果之前您在该文件中手动添加了 register_ipmi_cmd 函数,再次执行 bingo gen 后,新生成的代码(不包含该函数)会直接覆盖原有文件,导致手写函数“被删除”。
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的版本说明公示出来”)。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应该小写