多层级定制配置指导

概述

本文档介绍 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 平台平台配置按形态分类-rackmountinterface_config
产品定制产品差异化按产品系列分类构建阶段各产品仓<产品>/interface_config
客户定制用户差异化按客户分类运行阶段各客户仓interface_config

接口配置策略

在开发过程中,需要根据接口修改的类型选择合适的配置层级:

说明

虽然北向机制提供了产品定制、客户定制能力,能满足大部分场景使用。但是为了长期可维护性,需要尽可能将定制诉求抽象为特性,按特性合入平台仓。

接口修改类型配置层级代码仓库配置目录
通用接口修改平台仓rackmountinterface_config/
机型特有接口修改产品仓各产品仓<产品>/interface_config/
客户特有接口修改客户仓各客户仓interface_config/

映射器配置

认识映射器

映射器是实现多层级定制的核心组件,负责:

  • 配置存储 - 存储各层级的配置数据
  • 配置合并 - 合并多层配置为最终配置
  • 配置解析 - 解析接口配置文件
  • 配置应用 - 将配置应用到北向接口

配置目录结构

rackmount 仓库(平台配置)

text
rackmount/
└── interface_config/
    ├── redfish/
    ├── web_backend/
    ├── cli/
    └── snmp/

产品仓库(产品定制)

text
<产品仓>/
└── interface_config/
    ├── redfish/
    ├── web_backend/
    ├── cli/
    └── snmp/

客户仓库(客户定制)

text
<客户仓>/
└── interface_config/
    ├── redfish/
    ├── web_backend/
    ├── cli/
    └── snmp/

配置合并流程

产品定制(构建阶段)

  1. 读取 rackmount 平台配置。
  2. 读取产品定制配置。
  3. 合并配置(产品定制覆盖平台配置)。
  4. 生成最终映射器配置。
  5. 编译到系统镜像中。

客户定制(运行阶段)

  1. 读取系统中已合并的映射器配置。
  2. 根据客户名属性读取客户定制配置。
  3. 合并配置(客户定制覆盖系统配置)。
  4. 动态更新映射器配置。
  5. 应用到北向接口。

接口配置语法

参考社区产品多层级接口定制相关文档

配置文件

接口配置文件结构

接口配置文件按照北向接口类型分类:

接口类型目录描述
Redfishredfish/Redfish 接口配置
Web_backendweb_backend/Web 后端接口配置
CLIcli/CLI 接口配置
SNMPsnmp/SNMP 接口配置

构建后全量配置文件获取

在 manifest 仓执行个人构建后,生成的接口配置压缩文件保存在 output/packet/inner/interface_config 目录下。

输出文件说明

文件说明
xxxx_Product.zip构建时指定的产品类型的全量配置文件
xxxx_<客户名>.zip该产品类型下,添加客户定制化后生成的接口配置

解压后目录结构

text
├── cli/
├── redfish/
├── snmp/
└── web_backend/

各类型接口配置归档在对应目录下,解压后可获取与环境中运行状态等效的接口配置。

常见问题

客户定制未生效

问题现象:配置了客户定制后,接口行为未发生变化

可能原因

  1. 客户名属性未正确设置
  2. 客户定制配置文件不存在或路径错误
  3. 配置文件格式错误

解决方法

  1. 检查客户名属性:GET /redfish/v1/Managers/{ManagerId}/Package
  2. 确认客户定制配置文件存在于正确路径
  3. 验证配置文件格式

配置合并结果不符合预期

问题现象:合并后的配置与预期不一致

可能原因

  1. 配置优先级理解错误
  2. 配置覆盖规则应用错误
  3. 配置文件冲突

解决方法

  1. 确认配置层级和优先级
  2. 检查配置覆盖规则
  3. 解决配置冲突

产品定制在构建时未生效

问题现象:构建的产品镜像中产品定制未生效

可能原因

  1. 产品配置文件路径错误
  2. 构建配置未正确设置
  3. 配置文件格式错误

解决方法

  1. 确认产品配置文件路径:<产品>/interface_config/
  2. 检查构建配置
  3. 验证配置文件格式

附录

参考资料