告别Web界面:用Postman玩转服务器BMC的12个Redfish实战操作(含Session管理避坑)
在数据中心运维和服务器管理中,Redfish作为新一代硬件管理接口标准,正逐步取代传统的IPMI协议。然而,许多工程师仍习惯于通过Web界面进行点对点操作,这种方式在批量管理、自动化测试和持续集成场景中显得力不从心。本文将带你解锁Postman这一API开发利器,构建完整的Redfish自动化工作流。
1. 为什么选择Postman进行Redfish接口测试
传统Web界面操作存在三个明显短板:无法批量执行、难以集成到自动化流程、缺乏可复用的测试案例。而Postman恰好能解决这些问题:
- 环境变量管理:全局/集合/环境三级变量体系,轻松切换不同服务器配置
- 测试脚本集成:支持JavaScript编写预处理和断言脚本,实现自动化校验
- 集合运行器:批量执行接口调用序列,生成可视化报告
- 团队协作:通过共享集合实现知识沉淀,降低新人学习成本
以电源控制为例,当需要同时对50台服务器执行关机→配置更新→开机的操作序列时,Web界面需要人工逐台操作至少150次,而Postman集合运行只需一次触发。
2. 环境准备与认证机制深度解析
2.1 基础环境配置
首先需要关闭SSL证书验证(仅测试环境适用):
File → Settings → General → SSL certificate verification → OFF建议创建以下环境变量:
| 变量名 | 示例值 | 作用域 |
|---|---|---|
deviceip | 192.168.1.100 | 环境变量 |
bmc_user | admin | 全局变量 |
bmc_password | YourComplexPwd123 | 全局变量 |
2.2 Session管理的最佳实践
Redfish的Session认证涉及两个关键头部:
X-Auth-Token:身份验证令牌ETag:资源版本控制标识
登录接口示例:
POST https://{{deviceip}}/redfish/v1/SessionService/Sessions Headers: { "Content-Type": "application/json" } Body: { "UserName": "{{bmc_user}}", "Password": "{{bmc_password}}" }在Tests脚本中处理Token:
const token = pm.response.headers.get("X-Auth-Token"); pm.globals.set("X-Auth-Token", token); // 验证响应状态 pm.test("Status code is 201", () => { pm.response.to.have.status(201); });注意:生产环境应定期轮换Token,建议设置定时器每30分钟重新获取
3. 服务器资产管理全流程自动化
3.1 资产信息采集
通过GET请求获取系统详情:
GET https://{{deviceip}}/redfish/v1/Systems/1 Headers: { "X-Auth-Token": "{{X-Auth-Token}}" }典型响应字段解析:
{ "Manufacturer": "Dell", "Model": "PowerEdge R740", "SerialNumber": "ABC123456", "ProcessorSummary": { "Count": 2, "Model": "Intel Xeon Gold 6248R" }, "MemorySummary": { "TotalSystemMemoryGB": 256 } }建议在Tests脚本中添加数据校验:
const jsonData = pm.response.json(); pm.test("Verify system model", () => { pm.expect(jsonData.Model).to.include("PowerEdge"); });3.2 电源控制三连击
服务器电源管理支持多种操作模式:
| 操作类型 | 请求体参数 | 适用场景 |
|---|---|---|
| 正常关机 | {"ResetType":"GracefulShutdown"} | 允许应用保存数据 |
| 强制重启 | {"ResetType":"ForceRestart"} | 系统无响应时使用 |
| 开机 | {"ResetType":"On"} | 冷启动设备 |
示例请求:
POST https://{{deviceip}}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset Headers: { "X-Auth-Token": "{{X-Auth-Token}}", "Content-Type": "application/json" } Body: { "ResetType": "GracefulShutdown" }4. 用户账户全生命周期管理
4.1 创建高权限账户
账户创建需要指定角色类型:
POST https://{{deviceip}}/redfish/v1/AccountService/Accounts Headers: { "X-Auth-Token": "{{X-Auth-Token}}", "Content-Type": "application/json" } Body: { "Id": "10", "UserName": "api_operator", "Password": "SecurePwd@2023", "RoleId": "Administrator" }可用角色类型对照表:
| RoleId | 权限级别 |
|---|---|
| Administrator | 完全控制权限 |
| Operator | 常规操作权限 |
| ReadOnly | 只读权限 |
4.2 用户信息修改的原子性操作
修改用户信息需要遵循ETag机制:
- 先获取用户当前信息(包含ETag)
- 使用获取到的ETag进行修改
PATCH https://{{deviceip}}/redfish/v1/AccountService/Accounts/10 Headers: { "X-Auth-Token": "{{X-Auth-Token}}", "Content-Type": "application/json", "If-Match": "{{ETag}}" } Body: { "Password": "NewSecurePwd@2024" }关键点:ETag机制防止并发修改冲突,类似乐观锁机制
5. 网络配置与BIOS设置的进阶技巧
5.1 管理网络接口配置
获取网口信息时注意MAC地址定位:
GET https://{{deviceip}}/redfish/v1/Managers/1/EthernetInterfaces/10c3ab155768修改IP地址的完整示例:
PATCH https://{{deviceip}}/redfish/v1/Managers/1/EthernetInterfaces/10c3ab155768 Headers: { "X-Auth-Token": "{{X-Auth-Token}}", "Content-Type": "application/json", "If-Match": "{{ETag}}" } Body: { "IPv4Addresses": [{ "Address": "192.168.100.100", "SubnetMask": "255.255.255.0", "Gateway": "192.168.100.1" }] }5.2 BIOS参数批量调整
获取当前BIOS设置:
GET https://{{deviceip}}/redfish/v1/Systems/1/Bios/Settings修改启动顺序的实战示例:
PATCH https://{{deviceip}}/redfish/v1/Systems/1/Bios/Settings Headers: { "X-Auth-Token": "{{X-Auth-Token}}", "Content-Type": "application/json", "If-Match": "{{ETag}}" } Body: { "Attributes": { "BootMode": "Uefi", "BootTypeOrder0": "NvmeDrive", "BootTypeOrder1": "UsbDrive", "BootTypeOrder2": "PXE" } }6. 构建自动化测试工作流
将12个操作封装为Postman集合后,可以通过Newman命令行工具集成到CI/CD流程:
newman run Redfish_Collection.json \ --env-var deviceip=192.168.1.100 \ --env-var bmc_user=admin \ --env-var bmc_password=YourPwd \ --reporters cli,json典型工作流阶段:
- 预检阶段:验证BMC连通性、获取资产快照
- 配置阶段:网络设置、用户管理、BIOS调整
- 验证阶段:检查配置生效情况
- 恢复阶段:回滚测试环境
在真实项目中,我们通过这种方案将服务器固件更新的平均耗时从45分钟/台缩短到8分钟/台,且完全避免了人工操作错误。