1. 背景
管理板(SMM)需通过统一框级 Web 界面管理框内多块节点 BMC,提升框级设备服务级运维能力。路径级总评(topic/7480)已确定相关能力的资源树路径、实现接口名与北向 WebREST URI;本帖在此基线上细化方法/属性与 WebREST 入参、出参、Msg,并新增管理面网络 WebREST 路径(见 D-05)。
2. 整体方案
方案实现接口调用链:
SMM Web UI -> WebREST -> SMM 后端 -> Redfish -> BMC
2.1 BMC 用户管理(账户)
框级 Web 管理节点 BMC 本地账户(查询、新建、改密、修改用户信息、删除)。GET 可按 AggregationSource 过滤;POST/PATCH/DELETE 统一支持多板及每板多账户。
2.2 BMC 管理面网络
框级 Web 汇聚各节点 BMC 管理面网络信息;IPv4 / IPv6 分 URI 查询与设置。
2.3 上下电管理
框级 Web 经统一 URI /UI/Rest/Chassis/AggregationService/PowerControl 查询/控制电源;GET 可选 AggregationSource(省略=全部在位单板);响应 AggregationSources 数组,每项用 ChassisFunctionType 区分计算节点(Compute)与交换节点(Switch)。
3. 评审点清单
-
D-01 已评接口下新增方法 -
bmc.kepler.AggregationService.ManagerAccounts(总评 AS-03)- 新增内容:GetAccounts / New / ChangePwd / ModifyAccount / Delete → 见 4.1
-
D-02 细化 WebREST 入参/出参/Msg -
/UI/Rest/Chassis/AggregationService/Accounts(总评 AS-03)- 新增内容:GET / POST / PATCH / DELETE(多板多账户统一)-> 见 4.2
-
D-03 已评接口下新增方法 -
bmc.kepler.AggregationService.Ipv4(总评 AS-08)- 新增内容:GetIpv4 / SetIpMode / SetIpMaskGateway / SetIpAddr / SetDefaultGateway → 见 4.3
-
D-04 已评接口下新增方法 -
bmc.kepler.AggregationService.Ipv6(总评 AS-08)- 新增内容:GetIpv6 / SetIpMode / SetIpv6PrefixGateway / SetIpAddr / SetDefaultGateway → 见 4.4
-
D-05 新增 WebREST 接口
- 新增内容
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4(GET / PATCH)-> 见 4.5.1/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6(GET / PATCH)-> 见 4.5.2
-
D-06 已评接口下新增方法 -
bmc.kepler.AggregationService.PowerControl(总评 AS-09)- 新增内容:GetPowerState / PowerCtrl → 见 4.6
-
D-07 细化 WebREST 入参/出参/Msg -
/UI/Rest/Chassis/AggregationService/PowerControl(总评 AS-09)- 新增内容:GET / PATCH(统一 URI;响应带 ChassisFunctionType)-> 见 4.7
4. 详细评审点
资源树多板查询 / 写结果签名约定(与 topic/7576 一致)
| 形态 | 签名 | 说明 |
|---|---|---|
| 多板查询响应 | a(ssa{sv}) |
数组元素 = (AggregationSource, ProductName, props dict);AggregationSource / ProductName 在字典外,勿仅塞进 a{sv} / a{ss} |
| 多板写结果(无需 ProductName) | a(sis) |
(AggregationSource, status, ResultDetail);如 PowerCtrl |
| 单源多账户删除结果 | a(a{ss}) |
AccountId、status、ResultDetail(Delete 已带单源 AggregationSource) |
北向 WebREST JSON 仍展开为 AggregationSources[] / Results[] 对象字段,由资源树 a(ssa{sv}) / a(sis) 映射生成。
4.1 [D-01] 已评接口下新增方法 bmc.kepler.AggregationService.ManagerAccounts
已评基线(topic/7480 AS-03):
- 资源树路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/AccountService - 实现接口:
bmc.kepler.AggregationService.ManagerAccounts
接口描述:框级账户管理接口。按 AggregationSource 查询/操作账户,转发新建、改密、修改用户信息、删除至目标 BMC。归属聚合管理-账户功能域。对齐 BMC bmc.kepler.AccountService.ManagerAccounts / ManagerAccount;汇聚侧统一走方法,调用方不直接 SET BMC 账户属性。
BMC 参考:bmc.kepler.AccountService.ManagerAccounts(New 等)、bmc.kepler.AccountService.ManagerAccount(ChangePwd、Delete 及可写属性)
属性
本接口无可写属性、无只读属性。账户列表与账户字段通过 GetAccounts 方法返回;改角色/用户名/使能等由 ModifyAccount fan-out 写 BMC ManagerAccount 属性。
本次评审新增方法
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| GetAccounts | as | AggregationSources:as 可空=全部在位 |
a(ssa{sv}) | 每项:(AggregationSource, ProductName, props);AggregationSource / ProductName 在字典外;props 含 Accounts(a{sv} 数组,元素键:AccountId(y)/UserName(s)/RoleId(y)/RoleName(s,可选)/Enabled(b)/Locked(b,可选)/LoginInterface(as,可选)/FirstLoginPolicy(y,对齐 BMC Web /UI/Rest/AccessMgnt/Accounts:1=PromptPasswordReset 提示改密 / 2=ForcePasswordReset 强制改密)/AccountInsecurePromptEnabled(b,用户账户不安全提示使能,对齐 Redfish 布尔)) |
按源查询账户列表(可多源) | ReadOnly |
| New | 见参数 | AggregationSource(s) AccountId(y,可选,0=BMC分配且不可为1) UserName(s,1-32) Password(ay) RoleId(y) LoginInterface(as,可选) FirstLoginPolicy(y,可选) AccountInsecurePromptEnabled(b,可选) ReauthPassword(s,必填) |
y | AccountId | 在指定源新建一账户(WebREST 多板/多账户由北向逐项调用) | UserMgmt |
| ChangePwd | syays | AggregationSource(s) AccountId(y) Password(ay) ReauthPassword(s,必填) |
i | status(该源 Redfish HTTP status;2xx 成功) | 改密 | UserMgmt |
| ModifyAccount | sya{sv}s | AggregationSource(s) AccountId(y) Properties(a{sv}): - NewUserName - RoleId - Enabled - LoginInterface - LoginRuleIds - FirstLoginPolicy - PasswordChangeRequired - AccountInsecurePromptEnabled ReauthPassword(s,必填) |
i | status(同上) | 修改角色/用户名/使能/不安全提示使能等 | UserMgmt |
| Delete | says | AggregationSource(s) AccountIds(ay,至少1个) ReauthPassword(s,必填) |
a(a{ss}) | Results[]:AccountId、status、ResultDetail(单源,无需 ProductName) | 同源删除一或多账户 | UserMgmt |
约束:资源树单次写方法针对一个 AggregationSource;WebREST 多板/多账户由汇聚逐项调用。写操作均须 ReauthPassword,校验失败不得 fan-out BMC。同一次 WebREST PATCH 若同时含密码与用户信息:先 ChangePwd 再 ModifyAccount。status:该源 Redfish HTTP status;2xx 成功;不可达等映射 503;与整次 WebREST HTTP 分开(部分成功整次可为 200)。无 Count 字段(长度由数组计算)。多板查询响应签名 a(ssa{sv})(与 topic/7576 约定一致)。
新增方法影响
- 路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/AccountService - 影响:对外提供框级账户查询与增删改
- CSR:不涉及
- 持久化:账户数据在目标 BMC;汇聚层不持久化
- 其他:权限 UserMgmt;写操作须校验 ReauthPassword
4.2 [D-02] 细化 WebREST 入参/出参/Msg /UI/Rest/Chassis/AggregationService/Accounts
已评基线(topic/7480 AS-03):
- WebREST URI:
/UI/Rest/Chassis/AggregationService/Accounts - HTTP 方法:见总评 AS 详节
uri:/UI/Rest/Chassis/AggregationService/Accounts
变化类型:细化入参/出参/Msg;POST/PATCH/DELETE 与 GET 能力对齐为多板+每板多账户;字段 AggregationSource/ProductName;去掉 Count
应用场景:框级 Web「BMC 用户管理」
账户为资源 URI,不走 Actions。
| HTTP | 类型 | 映射方法 | 说明 |
|---|---|---|---|
| GET | 资源 | GetAccounts | query 可选 AggregationSource;省略=全部在位 |
| POST | 资源 | New(逐项) | AggregationSources[] 多板,每板 Accounts[] 多账户;ReauthPassword |
| PATCH | 资源 | ChangePwd / ModifyAccount(逐项) | AggregationSources[] 同上 |
| DELETE | 资源 | Delete(逐项) | AggregationSources[]:每板 Accounts[](项含 AccountId);ReauthPassword |
GET - 查询账户列表
操作类型:GET
操作权限:ReadOnly
请求参数(Query)
| 属性名称 | 取值类型 | 说明 | 是否允许为null |
|---|---|---|---|
| AggregationSource | string | 可选;指定则只查该源;省略则全部在位源 | 是 |
响应参数
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSources | array | 按源分组的账户列表(无 Count;长度=AggregationSources.length);由资源树 a(ssa{sv}) 展开 |
AggregationSources[] 元素(JSON:AggregationSource / ProductName 与 Accounts 并列;资源树侧二者在 props 外)
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSource | string | 汇聚源 Id(对齐 Redfish AggregationSource) |
| ProductName | string | 产品/单板展示名 |
| Accounts | array | 该源账户列表(必含账户字段,见下表 Accounts[] 元素;非空壳数组) |
Accounts[] 元素(GET 响应内嵌;前端用户管理页直接消费这些字段)
| 属性名称 | 取值类型 | 说明 | 是否必返 |
|---|---|---|---|
| AccountId | number | 目标 BMC 账户 Id | 是 |
| UserName | string | 用户名 | 是 |
| RoleId | number | 角色 Id | 是 |
| RoleName | string | 角色名(如 Administrator) | 否(有则返) |
| Enabled | boolean | 是否使能 | 是 |
| Locked | boolean | 是否锁定 | 否(BMC 有则返) |
| LoginInterface | array of string | 登录接口列表 | 否(BMC 有则返) |
| FirstLoginPolicy | number | 首次登录口令策略(对齐 BMC WebREST /UI/Rest/AccessMgnt/Accounts 与 ManagerAccount.FirstLoginPolicy):1=PromptPasswordReset(提示改密),2=ForcePasswordReset(强制改密) |
是 |
| AccountInsecurePromptEnabled | boolean | 用户账户不安全提示使能(对齐节点板 Redfish 布尔属性;true=使能不安全提示,false=关闭) |
是 |
说明:Accounts 不是仅占位;列表中每个账户对象须携带上表字段(含 FirstLoginPolicy、AccountInsecurePromptEnabled),供框级「BMC 用户管理」展示与设置,以及后续改密/改角色/删除定位 AccountId。
样例
无 query(全部在位源):
GET /UI/Rest/Chassis/AggregationService/Accounts
响应:
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"ProductName": "TNXXX",
"Accounts": [
{
"AccountId": 2,
"UserName": "admin",
"RoleId": 4,
"RoleName": "Administrator",
"Enabled": true,
"Locked": false,
"LoginInterface": ["Web", "Redfish"],
"FirstLoginPolicy": 2,
"AccountInsecurePromptEnabled": true
}
]
},
{
"AggregationSource": "Blade2",
"ProductName": "TNXXX",
"Accounts": [
{
"AccountId": 2,
"UserName": "admin",
"RoleId": 4,
"RoleName": "Administrator",
"Enabled": true,
"Locked": false,
"LoginInterface": ["Web", "Redfish"],
"FirstLoginPolicy": 1,
"AccountInsecurePromptEnabled": false
}
]
}
]
}
带 AggregationSource(单源):
GET /UI/Rest/Chassis/AggregationService/Accounts?AggregationSource=Blade1
响应:
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"ProductName": "TNXXX",
"Accounts": [
{
"AccountId": 2,
"UserName": "admin",
"RoleId": 4,
"RoleName": "Administrator",
"Enabled": true,
"Locked": false,
"LoginInterface": ["Web", "Redfish"],
"FirstLoginPolicy": 2,
"AccountInsecurePromptEnabled": true
}
]
}
]
}
POST - 新建账户(多板 / 每板多账户)
操作类型:POST
操作权限:UserMgmt
请求参数
| 属性名称 | 取值类型 | 说明 | 是否允许为null |
|---|---|---|---|
| ReauthPassword | string | 管理板登录密码 | 否 |
| AggregationSources | array | 至少 1 项(写请求按源分组;写响应仍用 Results) | 否 |
AggregationSources[] 元素(写请求)
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSource | string | 目标源 |
| Accounts | array | 该源待新建账户列表(至少 1);项含 UserName、Password(string(1,255))、RoleId;可选 AccountId、LoginInterface、FirstLoginPolicy、AccountInsecurePromptEnabled |
响应参数:Results(array):AggregationSource、AccountId(新建成功时返回)、status、ResultDetail。
样例
POST /UI/Rest/Chassis/AggregationService/Accounts
{
"ReauthPassword": "******",
"AggregationSources": [
{
"AggregationSource": "Blade1",
"Accounts": [
{ "UserName": "ops", "Password": "******", "RoleId": 3 },
{ "UserName": "audit", "Password": "******", "RoleId": 2 }
]
},
{
"AggregationSource": "Blade2",
"Accounts": [
{ "UserName": "ops", "Password": "******", "RoleId": 3 }
]
}
]
}
响应:
{
"Results": [
{ "AggregationSource": "Blade1", "AccountId": 5, "status": 200 },
{ "AggregationSource": "Blade1", "AccountId": 6, "status": 200 },
{ "AggregationSource": "Blade2", "AccountId": 5, "status": 200 }
]
}
PATCH - 改密 / 修改用户信息(多板 / 每板多账户)
操作类型:PATCH
操作权限:UserMgmt
请求参数:ReauthPassword + AggregationSources[];每项含 AggregationSource + Accounts[];账户项含 AccountId,可选 Password(-> ChangePwd)及 RoleId / NewUserName / Enabled / FirstLoginPolicy / AccountInsecurePromptEnabled 等(-> ModifyAccount)。密码二次确认由前端完成。
响应参数:Results(AggregationSource、AccountId、status、ResultDetail)。
样例
PATCH /UI/Rest/Chassis/AggregationService/Accounts
{
"ReauthPassword": "******",
"AggregationSources": [
{
"AggregationSource": "Blade1",
"Accounts": [
{ "AccountId": 5, "RoleId": 4, "AccountInsecurePromptEnabled": false },
{ "AccountId": 6, "Password": "******" }
]
}
]
}
DELETE - 删除账户(多板 / 每板多账户)
操作类型:DELETE
操作权限:UserMgmt
请求参数
| 属性名称 | 取值类型 | 说明 | 是否允许为null |
|---|---|---|---|
| ReauthPassword | string | 管理板登录密码 | 否 |
| AggregationSources | array | 至少 1 项(与 POST/PATCH 同形:每源 AggregationSource + Accounts[]) |
否 |
AggregationSources[] 元素(写请求)
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSource | string | 目标源 |
| Accounts | array | 该源待删除账户列表(至少 1);与 POST/PATCH 统一用 Accounts,不用 AccountIds |
Accounts[] 元素(DELETE)
| 属性名称 | 取值类型 | 说明 | 是否允许为null |
|---|---|---|---|
| AccountId | number | 目标 BMC 账户 Id(必填;定位待删账户) | 否 |
映射:WebREST 将同源 Accounts[].AccountId 收集后调用资源树 Delete(AggregationSource, AccountIds, ReauthPassword)。
响应参数:Results(AggregationSource、AccountId、status、ResultDetail)。
样例
DELETE /UI/Rest/Chassis/AggregationService/Accounts
{
"ReauthPassword": "******",
"AggregationSources": [
{
"AggregationSource": "Blade1",
"Accounts": [
{ "AccountId": 5 },
{ "AccountId": 6 }
]
},
{
"AggregationSource": "Blade2",
"Accounts": [
{ "AccountId": 3 }
]
}
]
}
响应:
{
"Results": [
{ "AggregationSource": "Blade1", "AccountId": 5, "status": 200 },
{ "AggregationSource": "Blade1", "AccountId": 6, "status": 200 },
{ "AggregationSource": "Blade2", "AccountId": 3, "status": 200 }
]
}
Msg / 错误信息(Accounts)
| 场景 | 建议 Msg / 行为 |
|---|---|
| 缺少 AggregationSources / AggregationSource / Accounts | 400;PropertyMissing |
| DELETE 的 Accounts[] 项缺 AccountId | 400;PropertyMissing |
| ReauthPassword 错误 | 401/403;不得 fan-out BMC |
| 目标源不可达 / BMC 失败 | Results[] 对应条 status=Redfish status 或 503;ResultDetail 带原因 |
4.3 [D-03] 已评接口下新增方法 bmc.kepler.AggregationService.Ipv4
已评基线(topic/7480 AS-08):
- 资源树路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService - 实现接口:
bmc.kepler.AggregationService.Ipv4
接口描述:框内节点 BMC 管理面 IPv4 查询与设置,转发至 BMC bmc.kepler.Managers.EthernetInterfaces.Ipv4。与 Ipv6 同挂 NetworkService。
属性
本汇聚接口无本地属性。
本次评审新增方法
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| GetIpv4 | as | AggregationSources:as 可空=全部在位 |
a(ssa{sv}) | 每项:(AggregationSource, ProductName, props);props:IpMode、IpAddr、SubnetMask、DefaultGateway、status(i,Redfish HTTP status) | 批量查询管理面 IPv4 | ReadOnly |
| SetIpMode | ss | AggregationSource(s),仅单源 IpMode(s,DHCP/Static) |
i | status | 设置 IPv4 模式 | BasicSetting |
| SetIpMaskGateway | ssss | AggregationSource、IpAddr、SubnetMask、DefaultGateway;仅单源 | i | status | 整包设置 | BasicSetting |
| SetIpAddr | sss | AggregationSource、IpAddr、SubnetMask;仅单源 | i | status | 设置地址+掩码 | BasicSetting |
| SetDefaultGateway | ss | AggregationSource、DefaultGateway;仅单源 | i | status | 设置网关 | BasicSetting |
设置约束:Set* 单源;WebREST AggregationSources[] 逐项调用。status=该源 Redfish HTTP status。写响应仍为 Results[]。多板查询响应签名 a(ssa{sv})。
新增方法影响
- 路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService+ Ipv4 - 影响:框级管理面 IPv4 批量查询与按源设置
- CSR:不涉及;持久化在目标 BMC
4.4 [D-04] 已评接口下新增方法 bmc.kepler.AggregationService.Ipv6
已评基线(topic/7480 AS-08):
- 资源树路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService - 实现接口:
bmc.kepler.AggregationService.Ipv6
接口描述:框内节点 BMC 管理面 IPv6 查询与设置。
属性
本汇聚接口无本地属性。
本次评审新增方法
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| GetIpv6 | as | AggregationSources:as 可空=全部在位 |
a(ssa{sv}) | 每项:(AggregationSource, ProductName, props);props:IpMode(Static/DHCPv6)、IpAddr、PrefixLength、DefaultGateway、SLAACIPv6Addresses(as,只读)、status | 批量查询管理面 IPv6 | ReadOnly |
| SetIpMode | ss | AggregationSource;IpMode(DHCPv6/Static);仅单源 | i | status | 改 IP 模式 | BasicSetting |
| SetIpv6PrefixGateway | ssis | AggregationSource、IpAddr、PrefixLength、DefaultGateway;仅单源 | i | status | 整包设置地址+前缀+网关 | BasicSetting |
| SetIpAddr | ssi | AggregationSource、IpAddr、PrefixLength;仅单源 | i | status | 设置地址+前缀 | BasicSetting |
| SetDefaultGateway | ss | AggregationSource、DefaultGateway;仅单源 | i | status | 设置网关 | BasicSetting |
设置约束:与 Ipv4 相同,单源;WebREST 逐项调用。前端每板只展示一条可配地址(IpAddr / PrefixLength / DefaultGateway / IpMode)。SLAACIPv6Addresses 仅查询、不可 Set。多板查询响应签名 a(ssa{sv})。
新增方法影响
- 路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService+ Ipv6 - 影响:框级管理面 IPv6;主地址与 IPv4 同形标量;SLAAC 地址单独只读数组
4.5 [D-05] 新增 WebREST 接口(管理面网络)
说明:下列 URI 为本帖新增评审点(相对总评 AS-08 原 /UI/Rest/Chassis/AggregationService/NetworkSetting 调整为管理面 IPv4/IPv6 分立路径,按新增路径评审)。
变化类型:新增路径、新增 WebREST 接口
应用场景:框级 Web 管理面网络 IPv4 / IPv6 页签
对齐字段习惯:BMC NetworkSettings(IPAddress / IPAddressMode / Gateway / SubnetMask / PrefixLength 等);IPAddressMode ↔ IpMode
资源树映射(总评 AS-08 已评路径):/bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService 上 bmc.kepler.AggregationService.Ipv4 / bmc.kepler.AggregationService.Ipv6;Set* 仅单源
| 新增 URI | HTTP | 映射方法 | 说明 |
|---|---|---|---|
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4 |
GET / PATCH | GetIpv4;逐项 SetIpMode + Set* | 管理面 IPv4 |
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6 |
GET / PATCH | GetIpv6;逐项 SetIpMode + Set* | 管理面 IPv6 |
不在路径外再带 IPVersion query(版本由 URI 表达)。
4.5.1 新增 URI /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4
uri:/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4
变化类型:新增路径、新增 WebREST 接口
操作:GET(资源)、PATCH(资源)
GET
操作权限:ReadOnly
无必填 query(版本由路径确定)。可选 AggregationSources 过滤。
响应:AggregationSources array。元素:AggregationSource、ProductName、IPAddress、Gateway、IPAddressMode(DHCP/Static)、SubnetMask、status(Redfish HTTP status;2xx 成功)。不回 IPVersion(已由 URI 表达)。
样例
GET /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4
响应:
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"ProductName": "TNXXX",
"IPAddress": "192.168.1.10",
"SubnetMask": "255.255.255.0",
"Gateway": "192.168.1.1",
"IPAddressMode": "Static",
"status": 200
},
{
"AggregationSource": "Blade2",
"ProductName": "TNXXX",
"IPAddress": "192.168.1.11",
"SubnetMask": "255.255.255.0",
"Gateway": "192.168.1.1",
"IPAddressMode": "Static",
"status": 200
}
]
}
PATCH
操作权限:BasicSetting
请求:AggregationSources array(必填)。元素:AggregationSource;可选 IPAddressMode、IPAddress、SubnetMask、Gateway。
下发:仅 IPAddressMode → SetIpMode;Static 全量优先 SetIpMaskGateway;只改地址 → SetIpAddr;只改网关 → SetDefaultGateway。
响应:Results(AggregationSource、ProductName、status、ResultDetail)。部分成功:整次 HTTP 200。
样例
PATCH /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"IPAddressMode": "Static",
"IPAddress": "192.168.1.20",
"SubnetMask": "255.255.255.0",
"Gateway": "192.168.1.1"
},
{
"AggregationSource": "Blade2",
"IPAddressMode": "Static",
"IPAddress": "192.168.1.21",
"SubnetMask": "255.255.255.0",
"Gateway": "192.168.1.1"
}
]
}
响应(部分失败示例):
{
"Results": [
{ "AggregationSource": "Blade1", "ProductName": "TNXXX", "status": 200 },
{
"AggregationSource": "Blade2",
"ProductName": "TNXXX",
"status": 503,
"ResultDetail": "BMC unreachable"
}
]
}
4.5.2 新增 URI /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6
uri:/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6
变化类型:新增路径、新增 WebREST 接口
操作:GET(资源)、PATCH(资源)
与 IPv4 对称:每板一条可配 IPv6(IPAddress / PrefixLength / Gateway / IPAddressMode=Static|DHCPv6)。另回 SLAACIPv6Addresses(string 数组,SLAAC/LinkLocal 自动地址),只读,不允许修改(PATCH 不得带此字段)。映射:IPAddress↔IpAddr,IPAddressMode↔IpMode,Gateway↔DefaultGateway。
下发:仅 IPAddressMode → SetIpMode;Static 全量优先 SetIpv6PrefixGateway;只改地址 → SetIpAddr;只改网关 → SetDefaultGateway。
样例 GET
GET /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6
响应:
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"ProductName": "TNXXX",
"IPAddress": "2001:db8::10",
"Gateway": "2001:db8::1",
"PrefixLength": 64,
"IPAddressMode": "Static",
"SLAACIPv6Addresses": [],
"status": 200
}
]
}
PATCH
操作权限:BasicSetting
请求:AggregationSources array(必填)。元素:AggregationSource;可选 IPAddressMode(Static/DHCPv6)、IPAddress、PrefixLength、Gateway。不得带 SLAACIPv6Addresses。
样例 PATCH
PATCH /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"IPAddressMode": "Static",
"IPAddress": "2001:db8::20",
"PrefixLength": 64,
"Gateway": "2001:db8::1"
}
]
}
响应:
{
"Results": [
{ "AggregationSource": "Blade1", "ProductName": "TNXXX", "status": 200 }
]
}
Msg / 错误信息(ManagerNetWork)
| 场景 | 建议 Msg / 行为 |
|---|---|
| PATCH 缺 AggregationSources | 400;PropertyMissing |
| Static 缺地址/掩码或前缀 | 400 |
| IPv6 PATCH 带 SLAACIPv6Addresses | 400(只读) |
| IPAddressMode 非 Static/DHCPv6 | 400 |
| IPv4 URI 出现 PrefixLength / IPv6 URI 出现 SubnetMask | 400 |
| IP 冲突 | 该源 status=BMC Redfish 4xx;ResultDetail 说明 |
| 不可达 | status=503 |
| 部分失败(前端) | 「成功 N / 失败 M」+ ProductName + ResultDetail(2xx 为成功) |
框内 IP 冲突由 BMC 检测;前端预检同批地址不一致。禁止「一份地址 + 多源复制」。
4.6 [D-06] 已评接口下新增方法 bmc.kepler.AggregationService.PowerControl
已评基线(topic/7480 AS-09):
- 资源树路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService - 实现接口:
bmc.kepler.AggregationService.PowerControl
接口描述:框级业务系统电源状态查询与上下电控制。批量 fan-out 至各节点 BMC bmc.kepler.Systems.FruCtrl。查询返回各源 ChassisFunctionType(Compute=计算节点 / Switch=交换节点);写操作按源类型校验允许的 PowerCtrlType。
BMC 参考:bmc.kepler.Systems.FruCtrl(PowerState;PowerCtrl)
属性
本汇聚接口无本地属性。
本次评审新增方法
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| GetPowerState | as | AggregationSources:as 可空=全部在位 |
a(ssa{sv}) | 每项:(AggregationSource, ProductName, props);props:ChassisFunctionType(Compute/Switch)、PowerState、status | 批量查询电源状态(含单板类型) | ReadOnly |
| PowerCtrl | assas | AggregationSources(as) PowerCtrlType(s):On / ForceOff / GracefulShutdown / ForceRestart / ForcePowerCycle / PowerCycle / ACCycle / NMI RestartCause(s,可选) (Switch 源拒绝 GracefulShutdown、NMI) |
a(sis) | Results[]:(AggregationSource, status, ResultDetail) | 批量上下电 | PowerMgmt |
约束:对 ChassisFunctionType=Switch 的源请求 GracefulShutdown / NMI 时拒绝该源(status=400,不得下发 BMC)。status=Redfish HTTP status。多板查询 a(ssa{sv});写 Results a(sis)。
新增方法影响
- 路径:
/bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService+ PowerControl - 影响:框级电源查询与批量控制;须按源 ChassisFunctionType 校验操作集
4.7 [D-07] 细化 WebREST 入参/出参/Msg /UI/Rest/Chassis/AggregationService/PowerControl
已评基线(topic/7480 AS-09):
- WebREST URI:
/UI/Rest/Chassis/AggregationService/PowerControl
uri:/UI/Rest/Chassis/AggregationService/PowerControl
变化类型:细化入参/出参/Msg(不拆分 ComputeringSystem / SwitchingSystem 子路径)
应用场景:框级 Web 电源菜单
对齐:BMC /UI/Rest/System/PowerControl(GET + PATCH)
资源树映射:GetPowerState / PowerCtrl
电源为资源 URI,不走 Actions。计算/交换由响应每项 ChassisFunctionType 区分,不再使用分 URI 或 NodeCategory query。
| HTTP | 类型 | 映射方法 | 说明 |
|---|---|---|---|
| GET | 资源 | GetPowerState | query 可选 AggregationSource;省略=全部在位单板 |
| PATCH | 资源 | PowerCtrl | AggregationSources + PowerCtrlType;按源类型校验操作集 |
GET
操作类型:GET
操作权限:ReadOnly
请求参数(Query)
| 属性名称 | 取值类型 | 说明 | 是否允许为null |
|---|---|---|---|
| AggregationSource | string | 可选;指定则只查该源;省略则全部在位单板 | 是 |
响应参数
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSources | array | 按源返回电源状态(与其他汇聚 GET 对齐;无 Count) |
AggregationSources[] 元素
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSource | string | 汇聚源 Id |
| ProductName | string | 产品/单板展示名 |
| ChassisFunctionType | string | 单板类型:Compute=计算节点,Switch=交换节点 |
| PowerState | string | 电源状态(对齐 BMC FruCtrl.PowerState,如 On / Off) |
| status | number | 该源 Redfish HTTP status;2xx 成功 |
样例
无 query(全部在位单板):
GET /UI/Rest/Chassis/AggregationService/PowerControl
响应:
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"ProductName": "TNXXX",
"ChassisFunctionType": "Compute",
"PowerState": "On",
"status": 200
},
{
"AggregationSource": "Switch1",
"ProductName": "TNXXX",
"ChassisFunctionType": "Switch",
"PowerState": "On",
"status": 200
}
]
}
带 AggregationSource:
GET /UI/Rest/Chassis/AggregationService/PowerControl?AggregationSource=Blade1
响应:
{
"AggregationSources": [
{
"AggregationSource": "Blade1",
"ProductName": "TNXXX",
"ChassisFunctionType": "Compute",
"PowerState": "On",
"status": 200
}
]
}
PATCH
操作类型:PATCH
操作权限:PowerMgmt
请求参数
| 属性名称 | 取值类型 | 说明 | 是否允许为null |
|---|---|---|---|
| AggregationSources | array of string | 目标源列表,至少 1 项 | 否 |
| PowerCtrlType | string | 见下表;汇聚层按各源 ChassisFunctionType 校验 | 否 |
| RestartCause | string | 可选;复位/重启原因(对齐 BMC) | 是 |
PowerCtrlType 与单板类型
| ChassisFunctionType | 允许 PowerCtrlType |
|---|---|
| Compute(计算节点) | On、ForceOff、GracefulShutdown、ForceRestart、ForcePowerCycle、PowerCycle、ACCycle、NMI |
| Switch(交换节点) | On、ForceOff、ForceRestart、ForcePowerCycle、PowerCycle、ACCycle;不允许 GracefulShutdown、NMI |
对 Switch 源请求 GracefulShutdown / NMI:该源 status=400,不得下发 BMC;同批其他源可继续。
响应参数
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| Results | array | 分源操作结果 |
Results[] 元素
| 属性名称 | 取值类型 | 说明 |
|---|---|---|
| AggregationSource | string | 汇聚源 Id |
| status | number | 该源 Redfish HTTP status;2xx 成功;不允许的操作为 400 |
| ResultDetail | string | 可选;失败原因 |
部分成功时整次 WebREST 仍可为 HTTP 200。
样例
PATCH /UI/Rest/Chassis/AggregationService/PowerControl
{
"AggregationSources": ["Blade1", "Switch1"],
"PowerCtrlType": "ForceOff"
}
响应:
{
"Results": [
{ "AggregationSource": "Blade1", "status": 200 },
{ "AggregationSource": "Switch1", "status": 200 }
]
}
样例(交换节点拒绝 GracefulShutdown)
PATCH /UI/Rest/Chassis/AggregationService/PowerControl
{
"AggregationSources": ["Switch1"],
"PowerCtrlType": "GracefulShutdown"
}
响应:
{
"Results": [
{
"AggregationSource": "Switch1",
"status": 400,
"ResultDetail": "GracefulShutdown is not supported on Switch"
}
]
}
Msg / 错误信息(PowerControl)
| 场景 | 建议 Msg / 行为 |
|---|---|
| PATCH 缺少 AggregationSources / PowerCtrlType | 400;PropertyMissing |
| Switch 源 + GracefulShutdown / NMI | 该源 status=400;ResultDetail 说明不允许;不得下发 BMC |
| 非法 PowerCtrlType | 该源 status=400 |
| BMC FruCtrl 失败 / 不可达 | Results 填 Redfish HTTP status(如 503)+ ResultDetail |
| 部分失败(前端) | 「成功 N / 失败 M」+ AggregationSource/ProductName + ResultDetail(2xx 为成功) |
是否准备好AI预审
是
评审结论
-
同意
bmc.kepler.AggregationService.ManagerAccounts新增方法(路径/bmc/kepler/AggregationService/Aggregates/${AggregateId}/AccountService):GetAccounts:入参 AggregationSources(as,可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props 含Accounts数组);Accounts 元素含 AccountId、UserName、RoleId、RoleName(可选)、Enabled、Locked(可选)、LoginInterface(可选)、FirstLoginPolicy(1=PromptPasswordReset,2=ForcePasswordReset)、AccountInsecurePromptEnabled(boolean,用户账户不安全提示使能,对齐 Redfish);权限 ReadOnlyNew:入参 AggregationSource、AccountId(可选,0=BMC 分配且不可为 1)、UserName、Password(ay)、RoleId、LoginInterface(可选)、FirstLoginPolicy(可选)、AccountInsecurePromptEnabled(可选,boolean)、ReauthPassword(必填);出参 AccountId;权限 UserMgmtChangePwd:入参 AggregationSource、AccountId、Password(ay)、ReauthPassword;出参 status;权限 UserMgmtModifyAccount:入参 AggregationSource、AccountId、Properties(NewUserName/RoleId/Enabled/LoginInterface/LoginRuleIds/FirstLoginPolicy/PasswordChangeRequired/AccountInsecurePromptEnabled,未填不改)、ReauthPassword;出参 status;权限 UserMgmtDelete:入参 AggregationSource、AccountIds(ay,至少 1)、ReauthPassword;出参Results数组(AccountId、status、ResultDetail);权限 UserMgmt
-
同意新增 WebREST
/UI/Rest/Chassis/AggregationService/Accounts(写权限 UserMgmt,读权限 ReadOnly):- GET:可选 query AggregationSource(省略=全部在位源);响应
AggregationSources数组(每项含 AggregationSource、ProductName、Accounts数组,账户字段同上,含 AccountInsecurePromptEnabled) - POST:请求 ReauthPassword +
AggregationSources数组(每项 AggregationSource +Accounts数组,账户项含 UserName、Password、RoleId,可选 AccountId/LoginInterface/FirstLoginPolicy/AccountInsecurePromptEnabled);响应Results数组;映射逐项 New - PATCH:请求 ReauthPassword +
AggregationSources数组(每项 AggregationSource +Accounts数组,账户项含 AccountId,可选 Password 及角色/用户名/使能/AccountInsecurePromptEnabled 等);响应Results数组;映射 ChangePwd / ModifyAccount - DELETE:请求 ReauthPassword +
AggregationSources数组(每项 AggregationSource +Accounts数组,账户项仅需 AccountId);响应Results数组;映射 Delete(将 Accounts 中的 AccountId 收集为资源树 AccountIds)
- GET:可选 query AggregationSource(省略=全部在位源);响应
-
同意
bmc.kepler.AggregationService.Ipv4新增方法(路径/bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService;管理面 IPv4):GetIpv4:入参 AggregationSources(可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props:IpMode、IpAddr、SubnetMask、DefaultGateway、status);权限 ReadOnlySetIpMode:入参 AggregationSource、IpMode(DHCP/Static);出参 status;权限 BasicSettingSetIpMaskGateway:入参 AggregationSource、IpAddr、SubnetMask、DefaultGateway;出参 status;权限 BasicSettingSetIpAddr:入参 AggregationSource、IpAddr、SubnetMask;出参 status;权限 BasicSettingSetDefaultGateway:入参 AggregationSource、DefaultGateway;出参 status;权限 BasicSetting
-
同意
bmc.kepler.AggregationService.Ipv6新增方法:GetIpv6:入参 AggregationSources(可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props:IpMode(Static/DHCPv6)、IpAddr、PrefixLength、DefaultGateway、SLAACIPv6Addresses(as,只读)、status);权限 ReadOnlySetIpMode:入参 AggregationSource、IpMode(DHCPv6/Static);出参 status;权限 BasicSettingSetIpv6PrefixGateway:入参 AggregationSource、IpAddr、PrefixLength、DefaultGateway;出参 status;权限 BasicSettingSetIpAddr:入参 AggregationSource、IpAddr、PrefixLength;出参 status;权限 BasicSettingSetDefaultGateway:入参 AggregationSource、DefaultGateway;出参 status;权限 BasicSetting
-
同意新增 WebREST
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4:- GET:可选 AggregationSources 过滤;响应
AggregationSources数组(AggregationSource、ProductName、IPAddress、Gateway、IPAddressMode、SubnetMask、status);映射 GetIpv4 - PATCH:请求
AggregationSources数组(每项含 AggregationSource 及可选 IPAddressMode/IPAddress/SubnetMask/Gateway);响应Results数组;逐源调用 SetIpMode / SetIpMaskGateway / SetIpAddr / SetDefaultGateway
- GET:可选 AggregationSources 过滤;响应
-
同意新增 WebREST
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6:- GET:可选 AggregationSources 过滤;响应
AggregationSources数组(IPAddress、Gateway、PrefixLength、IPAddressMode=Static|DHCPv6、SLAACIPv6Addresses 只读、status);映射 GetIpv6 - PATCH:请求
AggregationSources数组(可选 IPAddressMode/IPAddress/PrefixLength/Gateway;不得带 SLAACIPv6Addresses);响应Results数组;逐源 SetIpMode / SetIpv6PrefixGateway / SetIpAddr / SetDefaultGateway
- GET:可选 AggregationSources 过滤;响应
-
同意
bmc.kepler.AggregationService.PowerControl新增方法(路径/bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService;接口无本地属性):GetPowerState:入参 AggregationSources(可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props:ChassisFunctionType(Compute/Switch)、PowerState、status);权限 ReadOnlyPowerCtrl:入参 AggregationSources、PowerCtrlType(On/ForceOff/GracefulShutdown/ForceRestart/ForcePowerCycle/PowerCycle/ACCycle/NMI)、RestartCause(可选);出参签名 a(sis)(AggregationSource、status、ResultDetail);权限 PowerMgmt;对 ChassisFunctionType=Switch 的源拒绝 GracefulShutdown、NMI
-
同意新增 WebREST
/UI/Rest/Chassis/AggregationService/PowerControl:- GET:可选 query AggregationSource(省略=全部在位单板);响应
AggregationSources数组,每项含 AggregationSource、ProductName、ChassisFunctionType(Compute=计算节点 / Switch=交换节点)、PowerState、status;映射 GetPowerState(资源树 a(ssa{sv})) - PATCH:请求 AggregationSources、PowerCtrlType、RestartCause(可选);响应
Results数组;映射 PowerCtrl(资源树 a(sis));按源 ChassisFunctionType 校验允许操作集
- GET:可选 query AggregationSource(省略=全部在位单板);响应
-
同意多板查询资源树响应确定字段 AggregationSource、ProductName 置于字典类型之前(签名 a(ssa{sv}));PowerCtrl 写 Results 为 a(sis);与 topic/7576 约定一致
遗留问题
- 用户管理接口需要统一,GET接口需要提供TargetBoard获取能力、去掉不必要的Count数据已闭环(前端根据数组计算,无需Count参数,刷新评审点信息去掉Count参数)
- BoardName修改为ProductName—已闭环(刷新对应评审点信息)
- TargetBoard参考Redfish规范修改为AggregationSource—已闭环(刷新对应评审点信息)
- Account 的POST、PATCH 接口定义与GET、DELETE对齐,支持操作多个单板,以及每个单板的多张账户—已闭环(刷新对应评审点信息)
- 网络信息获取接口响应。按多板维度,返回错误Msg信息。管理板板处理南向BMC的返回,再映射返回到管理板WebRest信息。—已闭环(刷新对应评审点信息)
- 网络REST接口拆分,并体现汇聚的是管理面网络信息—已闭环(刷新对应评审点信息)
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4
/UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6 - 资源树响应 AggregationSource、ProductName 放在字典前 — 已闭环:GetAccounts / GetIpv4 / GetIpv6 / GetPowerState 出参签名 a(ssa{sv});PowerCtrl Results a(sis);与 topic/7576 一致。
- Accounts 新增
AccountInsecurePromptEnabled— 已闭环:boolean,用户账户不安全提示使能;GET 查询必返;POST 可选;PATCH/ModifyAccount可设(对齐节点板 Redfish 布尔)。 - 分源 ResultCode → status — 已闭环:分源 / Results 由管理板封装节点返回码后以 status 属性返回北向(HTTP status 语义)。