Skip to main content
Glama

RedfishClient

一个轻量的 Redfish 客户端与固件更新工具集,聚焦于会话管理、资源访问与固件升级流程。代码结构清晰、可扩展,适合集成到自动化维护或制造测试流程中。

特性

  • 会话鉴权与统一请求封装(支持 X-Auth-Token

  • 资源服务分层:SystemsFirmware 等服务的便捷入口

  • 固件操作:上传镜像、触发 SimpleUpdate、轮询任务、删除占位条目、Power Cycle

  • 端点可配置:通过 endpoints.json 适配不同 BMC 实现

  • 结构化日志(控制台高可读性,文件详细排障)

目录结构

RedfishClient/ ├─ main.py # 使用示例与演示流程 ├─ endpoints.json # 端点配置(按 BMC 类型) ├─ redfish_client/ │ ├─ client.py # 客户端聚合器(传输、鉴权、资源入口) │ ├─ config.py # 日志与端点加载/查询 │ ├─ auth/ │ │ ├─ base.py # 鉴权抽象基类 │ │ └─ session.py # 会话鉴权实现 │ ├─ transport/ │ │ ├─ base.py # 传输抽象基类 │ │ └─ requests.py # 基于 requests 的传输实现 │ └─ resources/ │ ├─ base.py # 资源服务基类 │ ├─ systems.py # Systems 资源服务 │ └─ firmware.py # 固件服务(上传/更新/任务/删除等) └─ bmc_client/ └─ bmc.py # 另一个 Web API 会话客户端(可选/示例)

使用 uv 管理依赖与环境

  • 初始化并安装依赖:

    • uv sync

  • 启动示例或服务:

    • 示例:uv run python -m main

    • MCP 服务:uv run python -m mcp_server

  • 添加依赖:

    • 核心:uv add requests loguru fastmcp

    • 可选:uv add --optional jsonpath

  • 升级依赖:

    • 全量:uv sync --upgrade

    • 指定:uv add fastmcp@latest

  • 导出依赖(供非 uv 环境使用):

    • uv export -o requirements.txt

快速开始

以固件升级流程为例(使用 uv 运行):

from redfish_client.client import RedfishClient from redfish_client.config import setup_logging, load_endpoints setup_logging(console_level='DEBUG') load_endpoints() client = RedfishClient( host="<BMC_IP>", port=443, username="<USER>", password="<PASS>", verify_ssl=False, timeout=60, bmc_type="default", # 对应 endpoints.json 的键 ) if client.login(): # 可选:设置升级是否保留 BIOS/BMC 配置 client.firmware.preset_save_config('ActiveBIOSTarget', False) # 上传固件镜像(本地文件路径) client.firmware.upload_image('firmware.tar') # 触发更新(返回任务 URI,部分实现可能在响应体或 Location 头部) task_uri = client.firmware.simple_update('ActiveBIOSTarget') # 轮询任务直至完成(可根据需要处理返回对象) if task_uri: client.firmware.wait_for_task_completion(task_uri) # 执行 Power Cycle(部分平台要求) client.firmware.power_cycle() client.logout()

更多示例可参考 main.py。运行方式:uv run python -m main

启动后,可将 sse 服务地址配置到支持 MCP 服务的客户端中 如: { "redfish-client": { "transport": "sse", "url": "http://10.2.48.155:8000/sse" } } 📚 Docs: https://gofastmcp.com

端点配置

通过 endpoints.json 定义不同 BMC 类型的端点映射:

{ "default": { "SessionService": "/redfish/v1/SessionService/Sessions", "FirmwareInventory": "/redfish/v1/UpdateService/FirmwareInventory", "StartUpdate": "/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate", "UpdateService": "/redfish/v1/UpdateService", "ActiveBIOSTarget": "/redfish/v1/UpdateService/FirmwareInventory/ActiveBIOS", "ActiveBMCTarget": "/redfish/v1/UpdateService/FirmwareInventory/ActiveBMC" } }
  • 通过 load_endpoints() 读取配置,再由 get_endpoint(bmc_type, service) 解析具体路径。

  • 若某服务未配置,将回退到代码中的默认路径(如 FirmwareInventory)。

设计模式

  • 抽象工厂 / 策略(Strategy)

    • TransportBaseRequestsTransport:以抽象基类定义传输接口,允许后续扩展不同 HTTP 客户端或协议实现。

    • AuthBaseSessionAuth:抽象鉴权流程,当前实现基于 Redfish 会话与 X-Auth-Token,可替换为其他认证策略。

  • 外观(Facade)/ 聚合器

    • RedfishClient 聚合传输、鉴权与资源服务,提供统一的 get/post/patch/delete 与资源入口,简化上层调用。

  • 服务分层(Service Layer)

    • resources/* 将具体资源(Systems、Firmware)封装为服务对象,职责明确,便于扩展与测试。

  • 依赖注入(Constructor Injection)

    • ResourceBase 将客户端实例注入各服务,统一访问传输与鉴权上下文。

  • 数据驱动配置

    • 使用 endpoints.json 以数据驱动端点,减少分支逻辑与硬编码,便于跨平台适配。

日志

  • 通过 setup_logging() 统一配置控制台与文件日志:

    • 控制台:彩色输出、等级图标、方法/行号,便于交互式观察。

    • 文件:详细排障格式,按周轮转与保留。

  • 常见请求/响应摘要与异常均有记录,适合问题定位与审计。

关键 API 速览

  • 会话:client.login() / client.logout()

  • 请求:client.get/post/delete/patch(path, ...)

  • Systems:client.systems.get_members()get_member_details(member_path)

  • Firmware:

    • 查询:get_firmware_inventory()get_firmware_info(fid)get_firmware_inventory_expanded()

    • 上传:upload_image(path)(自动检测 New* 占位条目)

    • 更新:preset_save_config(service, flag)simple_update(service)power_cycle()

    • 任务:get_task_status(uri)wait_for_task_completion(uri)wait_for_new_firmware_marker()

    • 删除:delete_uploaded_firmware()

开发建议

  • 若对接不同厂商/平台,优先通过 endpoints.json 添加/修改端点,再在服务层扩展兼容逻辑。

  • 需要新增协议或传输方案时,实现 TransportBase 的子类并在 RedfishClient 中替换即可。

  • 严禁在代码中硬编码敏感信息;使用外部配置或环境变量传递凭证。

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hankerbiao/redfish-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server