告别命令行:用Postman玩转服务器BMC的12个Redfish核心操作(附完整脚本)
2026/6/8 21:41:13 网站建设 项目流程

告别命令行:用Postman玩转服务器BMC的12个Redfish核心操作(附完整脚本)

在服务器硬件管理的世界里,Redfish API正逐渐成为行业标准,但面对密密麻麻的curl命令和复杂的脚本调试,许多运维工程师都在寻找更优雅的解决方案。Postman作为API开发测试的瑞士军刀,其实可以成为管理服务器硬件的图形化利器——通过精心设计的请求集合,不仅能实现一键式操作,还能将复杂的BMC管理流程转化为可复用的工作流。

1. 为什么选择Postman管理Redfish接口

传统命令行操作存在几个明显痛点:每次都需要重新输入冗长的curl命令、难以保存和复用成功案例、缺乏可视化的响应解析。而Postman提供了完整的解决方案:

  • 环境变量管理:统一存储BMC IP、认证令牌等重复使用的参数
  • 请求集合:将常用操作分类保存,形成可分享的"操作手册"
  • 测试脚本:自动提取响应数据,验证操作结果
  • 文档集成:每个请求可添加详细说明,形成团队知识库
// 典型的环境变量设置示例 pm.environment.set("bmc_ip", "192.168.1.100"); pm.environment.set("auth_token", responseHeaders["X-Auth-Token"]);

对于需要管理多台服务器的IT团队,Postman的Collection Runner功能可以批量执行操作序列,比如同时检查所有服务器的固件版本或统一修改启动顺序。

2. 搭建Redfish测试环境

2.1 初始配置要点

开始前需要完成几个关键配置:

  1. 关闭SSL验证(仅测试环境):

    • 路径:File → Settings → General
    • 关闭"SSL certificate verification"
  2. 环境变量预设

    变量名示例值说明
    {{bmc_ip}}192.168.1.100BMC管理IP
    {{username}}admin默认管理员账户
    {{password}}your_password对应密码
  3. 全局Headers设置

    { "Content-Type": "application/json", "Accept": "application/json" }

2.2 认证流程自动化

Redfish的会话管理有别于普通API,正确的认证处理是后续操作的基础:

POST https://{{bmc_ip}}/redfish/v1/SessionService/Sessions Headers: Content-Type: application/json Body: { "UserName": "{{username}}", "Password": "{{password}}" }

关键是在Tests脚本中自动保存令牌:

// 提取并存储X-Auth-Token const token = pm.response.headers.get("X-Auth-Token"); pm.globals.set("X-Auth-Token", token); // 验证登录成功 pm.test("Session created", function() { pm.expect(pm.response.code).to.be.oneOf([200, 201]); });

3. 服务器生命周期管理

3.1 电源控制操作集

服务器电源管理是日常运维中最频繁的操作,Postman可以将其简化为三个按钮:

POST https://{{bmc_ip}}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset Headers: X-Auth-Token: {{X-Auth-Token}} Content-Type: application/json Body: { "ResetType": "On" // GracefulShutdown | ForceRestart }

注意:强制重启(ForceRestart)可能导致数据丢失,生产环境慎用

3.2 资产信息监控

建立定期检查的监控集合,包含以下关键请求:

  1. 系统概览

    GET https://{{bmc_ip}}/redfish/v1/Systems/1
  2. 存储信息

    GET https://{{bmc_ip}}/redfish/v1/Systems/1/Storage
  3. 健康状态

    GET https://{{bmc_ip}}/redfish/v1/Systems/1/Status

可以将这些请求设置为定时运行,配合Postman的监控功能实现自动化巡检。

4. 用户与网络配置

4.1 BMC用户全生命周期管理

用户管理需要特别注意ETag的处理流程:

  1. 创建用户

    POST https://{{bmc_ip}}/redfish/v1/AccountService/Accounts Body: { "UserName": "audit_user", "Password": "Secure@1234", "RoleId": "ReadOnly" }
  2. 修改用户(需先获取ETag):

    GET https://{{bmc_ip}}/redfish/v1/AccountService/Accounts/3

    在Tests中保存ETag:

    pm.globals.set("user_etag", pm.response.headers.get("ETag"));

    然后执行修改:

    PATCH https://{{bmc_ip}}/redfish/v1/AccountService/Accounts/3 Headers: If-Match: {{user_etag}} Body: { "Password": "NewSecure@1234" }

4.2 网络配置最佳实践

修改BMC管理地址是高风险操作,建议采用以下流程:

  1. 先获取当前网络配置:

    GET https://{{bmc_ip}}/redfish/v1/Managers/1/EthernetInterfaces/1
  2. 保存ETag和当前配置:

    pm.globals.set("net_etag", pm.response.headers.get("ETag")); pm.globals.set("original_ip", pm.response.json().IPv4Addresses[0].Address);
  3. 执行修改(含回滚预案):

    PATCH https://{{bmc_ip}}/redfish/v1/Managers/1/EthernetInterfaces/1 Body: { "IPv4Addresses": [{ "Address": "192.168.2.100", "SubnetMask": "255.255.255.0", "Gateway": "192.168.2.1" }] }
  4. 添加验证测试:

    pm.test("IP changed", function() { pm.expect(pm.response.code).to.equal(200); // 添加ping测试验证新IP可达性 });

5. BIOS配置自动化

5.1 安全获取BIOS设置

读取BIOS配置需要特别注意:

GET https://{{bmc_ip}}/redfish/v1/Systems/1/Bios/Settings Headers: X-Auth-Token: {{X-Auth-Token}}

响应中通常包含数百个参数,建议使用Postman的JSON可视化功能浏览:

// 提取关键参数示例 const biosSettings = pm.response.json(); pm.globals.set("boot_order", biosSettings.Attributes.BootOrder);

5.2 修改启动顺序实战

修改启动顺序是服务器维护的常见需求:

  1. 首先获取当前ETag:

    GET https://{{bmc_ip}}/redfish/v1/Systems/1/Bios
  2. 然后提交修改:

    PATCH https://{{bmc_ip}}/redfish/v1/Systems/1/Bios/Settings Headers: If-Match: {{bios_etag}} Body: { "Attributes": { "BootOrder": ["USB", "HDD", "PXE"], "SecureBootEnable": true } }

重要提示:不同厂商的BIOS参数名称可能不同,建议先在测试环境验证

6. 高级技巧与错误处理

6.1 请求预处理脚本

Pre-request Script可以增强请求的灵活性:

// 动态生成时间戳参数 const timestamp = new Date().toISOString(); pm.globals.set("current_time", timestamp); // 条件性设置Headers if (pm.globals.get("use_proxy") === "true") { pm.request.headers.add({ key: "Proxy-Authorization", value: "Basic " + btoa("proxy_user:pass") }); }

6.2 响应自动化测试

完善的Tests脚本可以构建自验证的请求集合:

// 验证响应时间符合SLA pm.test("Response time < 500ms", function() { pm.expect(pm.response.responseTime).to.be.below(500); }); // 验证JSON Schema pm.test("Schema is valid", function() { const schema = { type: "object", properties: { Id: {type: "string"}, Name: {type: "string"}, Status: { type: "object", properties: { State: {type: "string"}, Health: {type: "string"} } } } }; pm.response.to.have.jsonSchema(schema); });

6.3 常见错误处理

Redfish接口常见问题及解决方案:

错误码原因解决方案
401令牌过期重新登录获取新令牌
403权限不足检查用户角色权限
404资源不存在验证资源URI是否正确
412ETag不匹配重新获取最新资源状态
500BMC内部错误检查BMC日志,必要时重启
// 错误处理示例 pm.test("Status code is 200", function() { if (pm.response.code === 401) { postman.setNextRequest("Login"); pm.expect.fail("Session expired, relogin required"); } else { pm.expect(pm.response.code).to.equal(200); } });

7. 构建可交付的工具包

将上述所有请求组织成完整的Collection,并添加以下增强功能:

  1. 环境模板:包含不同环境的预设变量(开发/测试/生产)
  2. 文档注释:为每个请求添加操作说明和注意事项
  3. 工作流示例:创建典型场景的请求序列,如:
    • 服务器部署检查清单
    • 固件升级验证流程
    • 定期维护操作包

导出Collection时,可以选择包含环境变量生成完整的工具包。对于团队使用,建议:

  • 将Collection文件纳入版本控制
  • 使用Postman API同步更新
  • 定期审查和更新测试用例
// 集合级Tests示例 pm.collectionVariables.set("collection_version", "1.0.2"); pm.test("All operations completed", function() { pm.expect(pm.info.iteration).to.equal(pm.info.iterationCount); });

通过这种系统化的方法,原本分散在各类脚本中的BMC管理操作,就能转化为标准化的、可团队协作的Postman工具集。当需要在新环境中部署时,只需导入Collection和环境模板,就能立即获得全套管理能力,大幅降低运维工作的启动成本。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询