【已评审】管理板网络、上下电、用户聚合管理接口评审

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. 评审点清单

  1. D-01 已评接口下新增方法 - bmc.kepler.AggregationService.ManagerAccounts(总评 AS-03)

    • 新增内容:GetAccounts / New / ChangePwd / ModifyAccount / Delete → 见 4.1
  2. D-02 细化 WebREST 入参/出参/Msg - /UI/Rest/Chassis/AggregationService/Accounts(总评 AS-03)

    • 新增内容:GET / POST / PATCH / DELETE(多板多账户统一)-> 见 4.2
  3. D-03 已评接口下新增方法 - bmc.kepler.AggregationService.Ipv4(总评 AS-08)

    • 新增内容:GetIpv4 / SetIpMode / SetIpMaskGateway / SetIpAddr / SetDefaultGateway → 见 4.3
  4. D-04 已评接口下新增方法 - bmc.kepler.AggregationService.Ipv6(总评 AS-08)

    • 新增内容:GetIpv6 / SetIpMode / SetIpv6PrefixGateway / SetIpAddr / SetDefaultGateway → 见 4.4
  5. 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
  6. D-06 已评接口下新增方法 - bmc.kepler.AggregationService.PowerControl(总评 AS-09)

    • 新增内容:GetPowerState / PowerCtrl → 见 4.6
  7. 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预审

是

评审结论

  1. 同意 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);权限 ReadOnly
    • New:入参 AggregationSource、AccountId(可选,0=BMC 分配且不可为 1)、UserName、Password(ay)、RoleId、LoginInterface(可选)、FirstLoginPolicy(可选)、AccountInsecurePromptEnabled(可选,boolean)、ReauthPassword(必填);出参 AccountId;权限 UserMgmt
    • ChangePwd:入参 AggregationSource、AccountId、Password(ay)、ReauthPassword;出参 status;权限 UserMgmt
    • ModifyAccount:入参 AggregationSource、AccountId、Properties(NewUserName/RoleId/Enabled/LoginInterface/LoginRuleIds/FirstLoginPolicy/PasswordChangeRequired/AccountInsecurePromptEnabled,未填不改)、ReauthPassword;出参 status;权限 UserMgmt
    • Delete:入参 AggregationSource、AccountIds(ay,至少 1)、ReauthPassword;出参 Results 数组(AccountId、status、ResultDetail);权限 UserMgmt
  2. 同意新增 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)
  3. 同意 bmc.kepler.AggregationService.Ipv4 新增方法(路径 /bmc/kepler/AggregationService/Aggregates/${AggregateId}/NetworkService;管理面 IPv4):

    • GetIpv4:入参 AggregationSources(可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props:IpMode、IpAddr、SubnetMask、DefaultGateway、status);权限 ReadOnly
    • SetIpMode:入参 AggregationSource、IpMode(DHCP/Static);出参 status;权限 BasicSetting
    • SetIpMaskGateway:入参 AggregationSource、IpAddr、SubnetMask、DefaultGateway;出参 status;权限 BasicSetting
    • SetIpAddr:入参 AggregationSource、IpAddr、SubnetMask;出参 status;权限 BasicSetting
    • SetDefaultGateway:入参 AggregationSource、DefaultGateway;出参 status;权限 BasicSetting
  4. 同意 bmc.kepler.AggregationService.Ipv6 新增方法:

    • GetIpv6:入参 AggregationSources(可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props:IpMode(Static/DHCPv6)、IpAddr、PrefixLength、DefaultGateway、SLAACIPv6Addresses(as,只读)、status);权限 ReadOnly
    • SetIpMode:入参 AggregationSource、IpMode(DHCPv6/Static);出参 status;权限 BasicSetting
    • SetIpv6PrefixGateway:入参 AggregationSource、IpAddr、PrefixLength、DefaultGateway;出参 status;权限 BasicSetting
    • SetIpAddr:入参 AggregationSource、IpAddr、PrefixLength;出参 status;权限 BasicSetting
    • SetDefaultGateway:入参 AggregationSource、DefaultGateway;出参 status;权限 BasicSetting
  5. 同意新增 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
  6. 同意新增 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
  7. 同意 bmc.kepler.AggregationService.PowerControl 新增方法(路径 /bmc/kepler/AggregationService/Aggregates/${AggregateId}/SystemService;接口无本地属性):

    • GetPowerState:入参 AggregationSources(可空=全部在位);出参签名 a(ssa{sv})(AggregationSource、ProductName 在字典外;props:ChassisFunctionType(Compute/Switch)、PowerState、status);权限 ReadOnly
    • PowerCtrl:入参 AggregationSources、PowerCtrlType(On/ForceOff/GracefulShutdown/ForceRestart/ForcePowerCycle/PowerCycle/ACCycle/NMI)、RestartCause(可选);出参签名 a(sis)(AggregationSource、status、ResultDetail);权限 PowerMgmt;对 ChassisFunctionType=Switch 的源拒绝 GracefulShutdown、NMI
  8. 同意新增 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 校验允许操作集
  9. 同意多板查询资源树响应确定字段 AggregationSource、ProductName 置于字典类型之前(签名 a(ssa{sv}));PowerCtrl 写 Results 为 a(sis);与 topic/7576 约定一致

遗留问题

  1. 用户管理接口需要统一,GET接口需要提供TargetBoard获取能力、去掉不必要的Count数据已闭环(前端根据数组计算,无需Count参数,刷新评审点信息去掉Count参数)
  2. BoardName修改为ProductName—已闭环(刷新对应评审点信息)
  3. TargetBoard参考Redfish规范修改为AggregationSource—已闭环(刷新对应评审点信息)
  4. Account 的POST、PATCH 接口定义与GET、DELETE对齐,支持操作多个单板,以及每个单板的多张账户—已闭环(刷新对应评审点信息)
  5. 网络信息获取接口响应。按多板维度,返回错误Msg信息。管理板板处理南向BMC的返回,再映射返回到管理板WebRest信息。—已闭环(刷新对应评审点信息)
  6. 网络REST接口拆分,并体现汇聚的是管理面网络信息—已闭环(刷新对应评审点信息)
    /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv4
    /UI/Rest/Chassis/AggregationService/ManagerNetWork/IPv6
  7. 资源树响应 AggregationSource、ProductName 放在字典前 — 已闭环:GetAccounts / GetIpv4 / GetIpv6 / GetPowerState 出参签名 a(ssa{sv});PowerCtrl Results a(sis);与 topic/7576 一致。
  8. Accounts 新增 AccountInsecurePromptEnabled — 已闭环:boolean,用户账户不安全提示使能;GET 查询必返;POST 可选;PATCH/ModifyAccount 可设(对齐节点板 Redfish 布尔)。
  9. 分源 ResultCode → status — 已闭环:分源 / Results 由管理板封装节点返回码后以 status 属性返回北向(HTTP status 语义)。
  1. 每个接口都有TargetBoard参数,是否考虑每个单板作为一个单独的资源,避免传递TargetBoard参数。
  2. GetAccounts 参数 a{sv}未说明v的具体参数

权限字段确认是否正确

  1. 统一确认返回参数是否需要返回码
  2. 确认是否添加属性到资源树,避免通过大而全的GetIpv6方法获取大量属性
  3. 确认是否需要EthGroupId参数以适配节点存在多个对外网口的场景。
  1. 确认是否可以通过属性承载PowerState
  2. 计算板、交换板是否通过FruId区分
  3. 确认所有的方法是同步还是异步执行,同步方法且跨板调用的话耗时是否可接受

已修改UserMgmt

因为设置是通过管理板下发到节点板,不能作为属性承载。
计算板合交换板属于不同单板,无法通过FruId区分。
同步调用,完成对所有目标单板的接口调用后返回。多板操作,页面反应会有延时,产品侧评估接受。

按板建对象会膨胀对象树、和在位/拔插生命周期绑定,和「汇聚无本地账户属性、只 fan-out」不一致。
针对av补充说明

管理板并不汇聚节点属性。
管理板只是根据北向查询对目标单板接口,通过调用单板接口获取对应参数值,因此使用方法调用是合适的。