What version of Redfish does your product support?
你是否曾經被問過這個問題,但是卻很疑惑怎麼回答。
DMTF 将Redfish 协议(protocol)的定义与数据模型(schema)分开,同时允许独立修改schema中定义的每个资源,所以完整描述一条Redfish需要列出每个Schema中支持的每个property,以及protocol version和supported feature。
REDFISH | DMTFhttps://www.dmtf.org/standards/redfish从DMTF的官网可以看到两份文件,一份是定义Protocol( DSP0266 Redfish Specification),另外一份是定义Schema(DSP0268 Redfish Schema Supplement, 搭配 DSP8010 Redfish Schema Bundle)
Protocol Version
DSP0266 Redfish Specification 主要内容是规范了Redfish需要符合哪些协议(例如OpenAPI, OData),Security 等,透过Redfish 指令(redfish/v1)可以得到Redfish Version
curl -k -u root:0penBmc -H "Content-Type: application/octet-stream" -X GET https://$bmcip/redfish/v1 --silent | jq -r ".RedfishVersion"
1.9.0
这边放一点点目录,有兴趣的可以去看看spec的内容,觉得写得蛮好的
Schema Version
Redfish使用 RESTful 接口执行操作,并使用 JSON 和 OData 格式处理数据负载。那开发Client端软体的工程师就需要知道Redifsh有可能会回传的资料格式长怎样,会有那些Data,这样才能进一步处理资料,所以我们常会听到Scheam这个词,Schema的中文翻译是"纲要、架构"之类的,描述一个Resource回传的数据架构,包含它有可能/必须有哪些property,和相对应的type和attribute
例如Property的Attributes是
- read-only: 只支援GET method
- required: 必须存在,不可为空
每个Resource 都有各自的schema,也有各自版本,它们都是伴随DSP0268/DSP8020 released的,每次release也只会更新需要更新的schema
Resource 的 Schema 版本可以从 @odata.type 获得
@odata.type 格式:#<ResourceType>.<Version>.<TermName>
其中 <Version> 是 v<MajorVersion>_<MinorVersion>_<ErrataVersion>
例如 "@odata.type": "#ComputerSystem.v1_8_0.ComputerSystem" ,可以得到ComputerSystem的版本是v1.8.0,透过查表得到他是在2019.2的时候被released的
这边可以顺便补充一点,DSP8010 中提供的json schema / csdl 是可以向下相容的,所以你的Resource 没有更到最新的没关系,但是如果Resource 的version 比DSP0268/DSP8010 的版本还要新的话,这样就会有问题
例如执行Redfish Service Validator来验证Redfish的时候,如果你的AcountService已经到v1.11的版本了,但你的Schema 还停留在2021.03,就会出现cannot find namespace之类的error log
总结
如果要描述一个Redfish 的版本,必须包含
- Protocol 版本 (RedfishVersion: v1.xx)
- Schema版本 (2022.01)
- 每个支援的Resource 版本 (AccoutService v1.10, ManagerService v2.xx...)