代码生成策略版本特性说明
更新时间:2025/10/15
在Gitcode上查看源码

代码生成策略版本特性说明

本文档说明代码生成策略的版本特性。

1. 代码生成策略版本配置

service.json中配置codegen_policy字段并指定版本号,不配置则默认使用最新版本。

json
"codegen_policy": {
    "version": 15
}

2. 代码生成策略版本新增特性说明

2.1 version: 18

支持基础框架满足资源树协作接口关键字规范要求

变更目的

当前资源树协作接口关键字使用范围不明确,对于开发资源树协作接口缺少评审和看护标准,需按照推荐方案进行整改。

变更内容

  • 属性在model.json中有配置refInterfacedisplayDescription字段时,按照model.json的定义进行生成,优先于mdb_interface定义。
  • 对于属性的options字段,emitChangedSignalmdb_interface中可定义,deprecatedexplicitvolatile优先按照model.json的定义进行生成。

兼容性影响

生成代码的版本大于等于18时,按照变更内容描述的方案进行生成。

2.2 version: 17

service.json接口依赖配置支持paths语法

变更目的

支持配置对包含同一接口的多类对象的依赖,限制*语法的使用,更精细化地订阅接口新增、删除等信号,避免启动阶段组件收到大量无用信号。

变更内容

  • 支持根据paths语法生成相应的客户端代码。

兼容性影响

  • 生成代码的版本大于等于17时,支持根据paths语法生成相应的客户端代码。
  • 依赖get_non_virtual_interface_objectsforeach_non_virtual_interface_objects方法支持传入对象类型的libmc4lua版本。

2.3 version: 16

支持MDS模型描述组件自定义命令命名、方法可选参数及默认值

变更目的

支持自省时输出组件自定义命令名称、方法及对应的参数描述,包括是否可选、参数描述及默认值等,同时支持在接口调用时支持缺省参数调用,简化调用逻辑。

变更内容

  • 支持MDS模型描述组件自定义命令命名、方法可选参数及默认值,生成自定义命令名称、可选参数、参数描述及默认值相关代码。

兼容性影响

生成代码的版本大于等于16时,生成自定义命令名称、可选参数、参数描述及默认值相关代码。

2.4 version: 15

不再生成组件初始化过程自动创建单例对象的代码

变更目的

对于model.json中无动态参数的资源树路径所在的类,会生成组件初始化过程自动创建单例对象的代码,导致该类在配置CSR场景下创建自发现对象冲突。

变更内容

  • 不再生成组件初始化过程自动创建单例对象的代码,单例对象由业务自行进行创建。

兼容性影响

生成代码的版本大于等于15时,不再自动创建单例对象,需要业务自行进行创建。

2.5 version: 14

持久化数据模型与持久化类型实现一致性

持久化数据持久化恢复一致性

bmcgo生成代码报错时提供完整的错误定位信息

变更目的

  1. 当前部分组件在数据模型中仅定义持久化tableName,未配置持久化类型的情况下,仍实现了数据持久化(内存数据库),与实际的模型定义不一致。
  2. 持久化数据模型需要过滤框架默认bmc.kepler.Object.Properties接口下的ClassNameObjectNameObjectIdentifier等保留字段,禁止这些字段被误持久化,导致数据库存储增加、内存开销增长,甚至后续持久化模型兼容性等问题。
  3. 对于当前不支持备份机制的持久化类型,例如复位持久化,不允许与支持备份机制的持久化类型混用,此时如果主数据库文件丢失,可能导致从备份数据库恢复时无法恢复,导致数据不一致。
  4. mdb_interface属性配置位置错误或漏配时,自动生成失败打印内仅会提示属性名,缺少必要的错误提示信息。

变更内容

  • 持久化模型中未配置持久化类型默认不做持久化,如果需要做持久化需要显式配置持久化类型,需要解决当前默认未配置持久化类型持久化的兼容性问题。
  • 过滤框架默认bmc.kepler.Object.Properties接口下的ClassNameObjectNameObjectIdentifier等保留字段,禁止这些字段被误持久化。
  • 不支持备份机制的持久化类型与支持备份机制的持久化类型混用时告警提示。
  • 对于自动生成代码的报错,增加配置文件、接口等相关信息。

兼容性影响

  • 生成代码的版本大于等于14时,未配置持久化类型默认不做持久化,如需使用ORM机制,则业务需要将类的tableType配置成Memory或属性的usage中配置Memory进行适配。
  • 生成代码的版本大于等于14时,不再生成bmc.kepler.Object.Properties接口相关代码,无功能影响。

2.6 version: 13

支持硬件自发现解析CSR配置中的属性别名同步和引用语法

变更目的

当前自动生成代码不支持硬件自发现解析CSR配置中的属性别名同步和引用语法,需要增加支持。

变更内容

  • gen_schema.py中,取消同一对象内所有同名属性仅能有一个配置"usage": [CSR]的限制。
  • 若属性配置别名,则propertiesinterface内属性使用别名生成。
  • 取消生成properties内的alias字段,改用生成title字段记录属性的本名。
  • 取消生成description字段。

兼容性影响

  • 已对版本增加判断进行限制,无兼容性问题。
  • 排查过CSR仓库,目前没有CSR使用属性别名的同步/引用语法。

2.7 version: 12

数据库支持扩展资源树属性

支持代码生成时对IPMI模型定义进行校验和检测

变更目的

  1. 当前本地持久化只支持对私有属性的扩展,无法适配资源树接口变更的情况。
  2. 当前自动生成代码缺少对IPMI模型定义的校验,需要增加支持。

变更内容

  • 支持资源树属性扩展时,本地持久化能正常生成扩展属性的相关数据库代码。
  • gen_ipmi_json.py中,对IPMI命令各个参数的格式、内容进行校验。

兼容性影响

  • 数据库支持扩展资源树属性:新增特性,无兼容性影响。
  • 支持代码生成时对IPMI模型定义进行校验和检测:已对可能涉及兼容性影响的校验部分增加版本判断(版本大于等于5),无兼容性问题。

2.8 version: 11

MDS持久化机制增强

变更目的

  • 支持持久化模型满足每个表都有主键。
  • 支持持久化模型指定表数据的最大行数。

变更内容

  • 持久化模型自动生成代码新增注册最大行数回调函数和属性table_max_rows,用于通知业务侧及清理数据库表和表的最大行数。
  • 对配置持久化的表要求必须配置主键。

兼容性影响

  • 支持定义最大行数是新增功能,生成代码的版本必须大于等于11,并且配置了tableMaxRows字段,才会生效,无兼容性问题。
  • 生成代码的版本大于等于11,配置持久化必须要配置主键。

2.9 version: 10

MDS默认值机制重构

变更目的

当前自动生成代码不支持MDS配置数组/字典类型的default值,需要增加支持。

变更内容

  • db_lua.py中,将MDS中配置的数组/字典类型的default值进行JSON序列化再生成。

兼容性影响

生成代码的版本大于等于10时,支持MDS配置数组/字典类型的default值。