// 此模板仅供参考,如果不适用可以修改
问题描述
在客户定制仓新增REDFISH的一个易变属性,如何将其加入IgnoreEtags数组中
尝试过的解决方案
在定制仓找相关的例子,只找到了重新实现整个接口时可以进行配置IgnoreEtags;如果只是在config.json里面对一个uri GET操作新增一个属性,没有找到可以参考的例子,请问是否可以实现在config.json对IgnoreEtags进行配置
答案内容由AI生成,仅供参考:
| 方案 | 适用场景 | 推荐度 |
|---|---|---|
在 config.json 中使用 Property.Actions.Set |
客户轻量级定制,仅需添加字段 | |
在 mapping_config/*.json 中直接配置 IgnoreEtags |
已复制完整接口配置 | |
使用 Lua 脚本动态控制(如 custom_request_response.lua) |
特殊逻辑处理 |
结论:
即使只是通过config.json新增属性,也可以通过Property.Actions.Set机制实现对Resources.IgnoreEtags的配置。但如果已有定制映射文件,建议直接在Resources中显式声明IgnoreEtags数组,更清晰且不易出错。
IgnoreEtags 数组在客户定制仓中为 Redfish 接口新增一个易变属性(如秒级或分钟级频繁变化的属性)时,需要将其加入 Resources.IgnoreEtags 数组中,以避免在执行 PATCH 操作时因 ETag 验证失败而导致更新失败。
IgnoreEtags?Resources.IgnoreEtags 是 Redfish 接口中的一个配置项,用于指定哪些属性在进行 ETag 校验时应被忽略。PATCH 请求经常因数据不一致而被拒绝。IgnoreEtags 数组中,使其不参与 ETag 比对。
注意规则:
IgnoreEtags的层级必须与 URI 层级一致。IgnoreEtags中列出的属性必须存在于响应体(RspBody)中。
config.json 中配置 IgnoreEtags虽然默认情况下 IgnoreEtags 通常在接口映射配置文件(如 mapping_config 中的 .json 文件)中定义,但在客户定制场景下,可以通过定制仓的 config.json 实现对 IgnoreEtags 的增补或覆盖。
config.json 中配置 IgnoreEtags?可以!
通过以下方式可以在客户定制的 config.json 中实现对 IgnoreEtags 的配置:
在 interface_config/config.json 中支持使用 GlobalVariable 和 Uri.Actions 进行字段替换和配置增强。
config.json 中添加 IgnoreEtags{
"GlobalVariable": {
"MyVolatileProp_IgnoreEtag": ["MyVolatileProp"]
},
"Property": {
"Actions": [
{
"Target": "Chassis/:chassisid/MyApp",
"Set": {
"Resources": {
"IgnoreEtags": "{{MyVolatileProp_IgnoreEtag}}"
}
}
}
]
}
}
说明:
- 使用
Property.Actions.Set可以在特定 URI 路径下注入或覆盖Resources.IgnoreEtags字段。{{MyVolatileProp_IgnoreEtag}}是通过GlobalVariable定义的数组,实现灵活管理。
如果你已在定制仓中复制了标准接口配置文件(如 MyApp.json),可以直接修改其内容:
mapping_config/Chassis/MyApp.json{
"Resources": [
{
"Uri": "/redfish/v1/Chassis/:chassisid/MyApp",
"Interfaces": [
{
"Type": "GET",
"RspBody": {
"Id": "MyApp",
"Name": "Custom Application",
"MyVolatileProp": "${ProcessingFlow[0]/Destination/value}",
"@odata.id": "/redfish/v1/Chassis/${Uri/chassisid}/MyApp"
},
"Resources": {
"IgnoreEtags": [
"MyVolatileProp"
]
},
"ProcessingFlow": [ ... ]
}
]
}
]
}
此方式最直接有效,适用于你已经复制并定制了映射文件的场景。
根据文档,以下类型属性属于易变属性,建议加入 IgnoreEtags:
| 属性类别 | 示例 |
|---|---|
| 实时监控数据 | 实时电压、电流、功率、温度 |
| 占用率指标 | CPU占用率、内存占用率、磁盘IO |
| 时间相关 | 时间戳、时长、进度 |
| 历史统计数据 | 功率历史、温度历史、占用率历史 |
| 硬件状态 | 转速、电池电量、能耗 |
原则:凡是以秒级或分钟级频率变化的属性,都应考虑是否需要加入
IgnoreEtags。
检查生成的接口响应中是否包含 IgnoreEtags 数组:
{
"Resources": {
"IgnoreEtags": ["MyVolatileProp"]
}
}
测试 PATCH 接口行为:
IgnoreEtags 属性,确认不会因 MyVolatileProp 值变化导致 428 Precondition Failed 错误。Resources.IgnoreEtags 是否生效。使用工具验证:
GET 请求到 /redfish/v1/Chassis/1/MyAppIgnoreEtags 配置| 方案 | 适用场景 | 推荐度 |
|---|---|---|
在 config.json 中使用 Property.Actions.Set |
客户轻量级定制,仅需添加字段 | |
在 mapping_config/*.json 中直接配置 IgnoreEtags |
已复制完整接口配置 | |
使用 Lua 脚本动态控制(如 custom_request_response.lua) |
特殊逻辑处理 |
结论:
即使只是通过config.json新增属性,也可以通过Property.Actions.Set机制实现对Resources.IgnoreEtags的配置。但如果已有定制映射文件,建议直接在Resources中显式声明IgnoreEtags数组,更清晰且不易出错。
config.json 替换机制说明当前暂不支持定制该字段
请问,还有问题吗?BMC当前不支持这个特性
没问题了
现在不支持config.json里定制易变属性的屏蔽么?我看JD仓库的[1.80.47] - 2026-4-24 修改就是这种场景x
最搓的办法应该就是在定制仓搞个完整的json文件,比如power.json,然后再这个json文件加入你要新增或者变动的内容, 后面使用覆盖原有json文件的语法就可以了
这个方案治标不治本,而且假设原power.json里做了修改,你这里完全感知不到
放在rackmount中不就行了
那确实是有这个问题,不过我当时就是通过这样的方式解决的;