看懂Redfish Schema与模型扩展:看这一篇就够了

前言:我们正面临一个典型的技术陷阱

在我们当前的项目开发中,存在一个隐患巨大的实践:直接修改官方发布的JSON Schema文件来添加自定义属性 。这种做法看似直接高效,实则从根本上违背了Redfish作为开放管理标准的设计规范,并会引发一系列兼容性、维护性和升级难题。

本文将阐述Redfish Schema的正确“玩法”。无论你是刚开始接触Redfish的开发者,还是正在为混乱的扩展方式寻找解决方案的设计人员,理解这套规范的扩展框架都至关重要——因为错误的实现方式会让产品在标准化、可维护性和兼容性上付出沉重代价

一、核心理念:Schema不是文件,而是模型

首先,必须建立一个关键认知:Redfish Schema不是一堆需要被“编辑”的静态文件(无论是JSON还是XML版本),而是一个通过元数据文档动态发布的、活的数据模型

这个模型的完整描述,通过向Redfish服务的 $metadata 资源发送一个GET请求即可获得:


GET /redfish/v1/$metadata

客户端通过解析这份元数据,就能理解服务提供的所有资源、属性、关系以及 OEM扩展 的完整信息。我们所有扩展工作的目标,就是让我们的自定义部分,能通过这个 $metadata 端点,清晰、标准地暴露给任何符合Redfish标准的客户端。

二、现有做法的根本问题

直接在官方发布的 ComputerSystem.v1_xx_x.json 等文件中添加修改属性,是一种侵入式的、不兼容的扩展方法 。其问题在于:

  1. 破坏标准兼容性 :你修改的是标准Schema,任何依赖于标准Schema进行验证、代码生成或动态发现的第三方工具、管理平台或客户端库都可能因此失效。
  2. 升级成为噩梦 :当DMTF发布新版本的Schema时(例如从 v1_17_0 升级到 v1_18_0 ),你将面临痛苦的合并冲突和手动迁移,极易出错。
  3. 官方工具无法使用 :你将无法使用DMTF提供的Redfish服务验证器(Service Validator) 等权威工具进行一致性测试,导致服务无法获得官方的“Redfish兼容”认证,影响产品互操作性与市场认可度。

三、正确的玩法:声明式、非侵入的扩展框架

Redfish设计了一套优雅的扩展机制,其核心原则是 “添加,而非修改” 。整个框架的协作关系如下图所示:

1. Oem 独立Xml文件:定义“是什么”

这是编写扩展定义 的地方。需要创建一个全新的、归属于厂商的XML文件(例如 ContosoAccountService.v1.xml ),在该文件中可以:

  • 定义新的属性 :为 Oem 对象下的属性建模。
  • 定义新的动作 :为现有资源添加自定义操作。

关键 :该文件与所在DMTF标准文件平行存在 ,绝不修改标准文件。

2. 元数据 $metadata:声明“怎么用”

这是连接标准与扩展的桥梁 ,通过 <edmx:Reference> 元素,显式引用 你编写的OEM Schema文件。


<edmx:Edmx> 
    <edmx:Reference Uri="http://Contoso.com/schemas/ContosoAccountService.v1.xml"> 
        <edmx:Include Namespace="ContosoAccountService"/> 
    </edmx:Reference> 
</edmx:Edmx>

四、三种主要扩展模式详解

模式 目标 做法
扩展属性 为现有资源(如 ComputerSystem , Chassis )添加自定义属性。 OEM Schema(Xml文件)中定义 属性 ,在 $metadata 中引用OEM Schema文件。
扩展Action 为现有资源添加自定义操作 OEM Schema中定义 Action ,绑定到标准资源(如 AccountService.v1_2_0.OemActions )。
扩展资源 创建全新的、独立的管理资源。 1. 在独立的OEM Schema中定义全新的自定义资源。
2. 若新资源是独立的,在 EntityContainer 中将其声明为 SingletonEntitySet ,使其成为 /redfish/v1/ 下的顶级资源。
3. 若新资源从属于某个现有资源 ,则在父资源的OEM Schema文件中,添加NavigationProperty来提供此子资源访问入口。
4. 在$metadata 中引用此资源的OEM Schema文件。

关键 :绝不修改任何现有标准资源的定义,所有OEM资源都通过独立Schema声明,并通过模型引用或导航属性挂载。

参考文献与权威来源

本文所阐述的 Redfish Schema 定义与扩展方法,均基于 DMTF 发布的官方规范,并可参考官方提供的权威示例进行验证。

3 个赞