OpenBMC:WebUI 与后端接口交互流程
1. WebUI 的作用
OpenBMC WebUI 为管理员提供图形化管理界面,常见功能包括:
- 查看服务器状态
- 读取传感器数据
- 控制主机电源
- 查看事件日志
- 配置用户和网络
- 管理固件版本
- 使用远程控制台
- 查看硬件 Inventory
WebUI 本身通常不直接访问 D-Bus,也不会直接操作 GPIO、I2C 或其他硬件接口。
WebUI ↓ HTTPS bmcweb ↓ D-Bus OpenBMC 后台服务 ↓ 硬件驱动2. WebUI 与 bmcweb
WebUI 通常以浏览器端单页应用的形式运行。页面所需的 HTML、JavaScript、CSS 和图片资源由 BMC Web 服务提供。
用户打开 BMC 地址时:
浏览器请求页面 ↓ bmcweb 返回静态资源 ↓ 浏览器加载 WebUI ↓ WebUI 调用 Redfish API ↓ 页面显示管理数据bmcweb同时承担以下职责:
- 提供 HTTPS 服务
- 提供 WebUI 静态资源
- 实现 Redfish 接口
- 管理登录会话
- 检查用户权限
- 访问 D-Bus 后台服务
- 支持事件订阅和远程控制功能
3. 登录认证流程
WebUI 登录时,通常通过 Redfish Session Service 创建会话。
用户输入账号和密码 ↓ WebUI 发送登录请求 ↓ bmcweb 调用认证机制 ↓ 验证用户、密码和账号状态 ↓ 创建 Session ↓ 返回 X-Auth-Token登录请求示例:
POST /redfish/v1/SessionService/Sessions Content-Type: application/json { "UserName": "admin", "Password": "password" }后续请求携带 Token:
X-Auth-Token: <session-token>bmcweb 收到请求后,还会检查当前用户角色是否拥有访问该接口的权限。
4. 数据查询流程
以 WebUI 显示温度传感器为例:
WebUI 请求 Sensors 资源 ↓ bmcweb 接收 Redfish GET 请求 ↓ 通过 ObjectMapper 查找 Sensor 对象 ↓ 读取 Sensor.Value 和 Threshold ↓ 读取 Sensor 与 Chassis 的关联关系 ↓ 转换为 Redfish JSON ↓ WebUI 更新页面请求示例:
GET /redfish/v1/Chassis/chassis/Sensors返回数据可能包含:
{ "Name": "CPU0 Temp", "Reading": 52.5, "ReadingUnits": "Cel", "Status": { "Health": "OK", "State": "Enabled" } }WebUI 只处理 Redfish 数据,不需要了解传感器来自 hwmon、PMBus 还是其他接口。
5. 控制请求流程
以主机上电为例,WebUI 会发送一个 Redfish Action:
POST /redfish/v1/Systems/system/Actions/ComputerSystem.Reset { "ResetType": "On" }完整流程如下:
用户点击上电 ↓ WebUI 发送 POST 请求 ↓ bmcweb 检查 Session 和权限 ↓ 解析 ResetType ↓ 设置 D-Bus 电源转换属性 ↓ 电源控制服务执行上电 ↓ 主机电源状态变化 ↓ WebUI 重新查询并刷新状态网络设置、用户管理和日志清理等操作也采用类似模式,只是对应的 Redfish 路径和后台 D-Bus 服务不同。
6. 常用 HTTP 方法
WebUI 与 Redfish 后端交互时,主要使用以下方法:
| 方法 | 用途 |
|---|---|
GET | 查询资源 |
POST | 创建资源或执行动作 |
PATCH | 修改资源属性 |
DELETE | 删除资源 |
HEAD | 查询资源响应头 |
例如修改 BMC 主机名:
PATCH /redfish/v1/Managers/bmc/NetworkProtocol创建用户、启动固件升级和执行电源动作,则通常使用POST。
7. 异步任务与事件更新
固件升级、日志导出和大文件上传等操作无法立即完成,bmcweb 可以返回 Task 或 Job 资源。
WebUI 发起操作 ↓ bmcweb 创建异步任务 ↓ 返回任务地址 ↓ WebUI 周期查询任务状态 ↓ 显示进度和执行结果任务状态可能包括:
New Starting Running Completed Exception Cancelled实时状态也可以通过事件订阅或服务器推送机制更新,减少页面频繁轮询。
8. 总结
WebUI 与 OpenBMC 后端的交互链路为:
浏览器 WebUI ↓ HTTPS / JSON bmcweb ↓ D-Bus 传感器、电源、日志、用户和升级服务 ↓ Linux 内核及硬件WebUI 负责界面和用户操作,bmcweb 负责认证、权限检查及 Redfish 转换,D-Bus 服务负责具体业务,内核驱动负责访问硬件。