多层级定制配置指导
概述
本文档介绍 openUBMC 多层级定制配置机制。openUBMC 北向接口(Redfish、Web_backend、CLI、SNMP)由映射器配置实现,达成流程和配置分离。多层级定制允许在不同层级进行差异化配置,实现通用与定制分离。
背景介绍
为什么需要多层级定制
openUBMC 北向接口通过映射器配置实现,但配置仅在 rackmount 一份。如果采用一个机型一份配置或者一个客户一份配置,会存在以下问题:
- 大量重复配置
- 可维护性差
- 难以快速满足多种场景的差异诉求
为了解决这些问题,需要提供机制进行接口级或属性级的扩展、裁剪、重命名处理,以实现通用与定制分离。
三层定制能力
认识三层定制
openUBMC 提供三层定制能力,分别是 BMC 平台、产品定制、客户定制。
BMC 平台
描述:提供平台映射器配置,按形态分类
代码仓库:rackmount
目录:interface_config
说明:当有形态为 rackmount 时,提供基础的映射器配置
产品定制
描述:提供产品相对平台进行差异化定制的能力,按产品系列分类
代码仓库:各产品仓
目录:<产品>/interface_config
合并时机:在产品构建阶段合并平台配置和产品定制配置
客户定制
描述:提供最终用户差异化定制的能力,按客户分类
代码仓库:各客户仓
目录:interface_config
合并时机:在运行阶段根据定制客户名合并定制配置
客户名属性:bmc/kepler/Managers/{ManagerId}/Package bmc.kepler.Managers.Package Customer
定制层级对比
| 层级 | 名称 | 分类方式 | 合并时机 | 代码仓库 | 目录 |
|---|---|---|---|---|---|
| openUBMC 平台 | 平台配置 | 按形态分类 | - | rackmount | interface_config |
| 产品定制 | 产品差异化 | 按产品系列分类 | 构建阶段 | 各产品仓 | <产品>/interface_config |
| 客户定制 | 用户差异化 | 按客户分类 | 运行阶段 | 各客户仓 | interface_config |
接口配置策略
在开发过程中,需要根据接口修改的类型选择合适的配置层级:
说明
虽然北向机制提供了产品定制、客户定制能力,能满足大部分场景使用。但是为了长期可维护性,需要尽可能将定制诉求抽象为特性,按特性合入平台仓。
| 接口修改类型 | 配置层级 | 代码仓库 | 配置目录 |
|---|---|---|---|
| 通用接口修改 | 平台仓 | rackmount | interface_config/ |
| 机型特有接口修改 | 产品仓 | 各产品仓 | <产品>/interface_config/ |
| 客户特有接口修改 | 客户仓 | 各客户仓 | interface_config/ |
映射器配置
认识映射器
映射器是实现多层级定制的核心组件,负责:
- 配置存储 - 存储各层级的配置数据
- 配置合并 - 合并多层配置为最终配置
- 配置解析 - 解析接口配置文件
- 配置应用 - 将配置应用到北向接口
配置目录结构
rackmount 仓库(平台配置)
rackmount/
└── interface_config/
├── redfish/
├── web_backend/
├── cli/
└── snmp/产品仓库(产品定制)
<产品仓>/
└── interface_config/
├── redfish/
├── web_backend/
├── cli/
└── snmp/客户仓库(客户定制)
<客户仓>/
└── interface_config/
├── redfish/
├── web_backend/
├── cli/
└── snmp/配置合并流程
产品定制(构建阶段)
- 读取 rackmount 平台配置。
- 读取产品定制配置。
- 合并配置(产品定制覆盖平台配置)。
- 生成最终映射器配置。
- 编译到系统镜像中。
客户定制(运行阶段)
- 读取系统中已合并的映射器配置。
- 根据客户名属性读取客户定制配置。
- 合并配置(客户定制覆盖系统配置)。
- 动态更新映射器配置。
- 应用到北向接口。
接口配置语法
参考社区产品多层级接口定制相关文档
配置文件
接口配置文件结构
接口配置文件按照北向接口类型分类:
| 接口类型 | 目录 | 描述 |
|---|---|---|
| Redfish | redfish/ | Redfish 接口配置 |
| Web_backend | web_backend/ | Web 后端接口配置 |
| CLI | cli/ | CLI 接口配置 |
| SNMP | snmp/ | SNMP 接口配置 |
构建后全量配置文件获取
在 manifest 仓执行个人构建后,生成的接口配置压缩文件保存在 output/packet/inner/interface_config 目录下。
输出文件说明
| 文件 | 说明 |
|---|---|
| xxxx_Product.zip | 构建时指定的产品类型的全量配置文件 |
xxxx_<客户名>.zip | 该产品类型下,添加客户定制化后生成的接口配置 |
解压后目录结构
├── cli/
├── redfish/
├── snmp/
└── web_backend/各类型接口配置归档在对应目录下,解压后可获取与环境中运行状态等效的接口配置。
常见问题
客户定制未生效
问题现象:配置了客户定制后,接口行为未发生变化
可能原因:
- 客户名属性未正确设置
- 客户定制配置文件不存在或路径错误
- 配置文件格式错误
解决方法:
- 检查客户名属性:
GET /redfish/v1/Managers/{ManagerId}/Package - 确认客户定制配置文件存在于正确路径
- 验证配置文件格式
配置合并结果不符合预期
问题现象:合并后的配置与预期不一致
可能原因:
- 配置优先级理解错误
- 配置覆盖规则应用错误
- 配置文件冲突
解决方法:
- 确认配置层级和优先级
- 检查配置覆盖规则
- 解决配置冲突
产品定制在构建时未生效
问题现象:构建的产品镜像中产品定制未生效
可能原因:
- 产品配置文件路径错误
- 构建配置未正确设置
- 配置文件格式错误
解决方法:
- 确认产品配置文件路径:
<产品>/interface_config/ - 检查构建配置
- 验证配置文件格式