2. iDRAC基础与Redfish API入门

iDRAC(Integrated Dell Remote Access Controller)是集成在PowerEdge服务器主板上的独立管理控制器,拥有自己的处理器、内存、网络接口和固件,只要服务器接通电源(甚至主机处于关机状态),iDRAC就能独立工作。它是批量运维的"入口":所有自动化脚本最终都要通过iDRAC暴露的接口去读取硬件清单、控制电源、下发配置。理解iDRAC的四种访问方式以及Redfish API的资源模型,是后续所有批量操作的基础。

四种访问方式及其适用场景

iDRAC对外提供四类访问通道,它们面向不同的使用习惯和自动化程度:

  • Web界面(HTTPS 443):图形化操作,适合首次初始化、查看仪表盘、人工排查。批量场景下效率低,但它是确认iDRAC自身状态(固件版本、许可证、网络配置)最直观的方式。
  • SSH(22):登录后进入iDRAC的CLI,可执行racadm命令,也可使用部分Linux风格命令。适合交互式排障和脚本化调用。
  • RACADM:Dell提供的管理命令行工具,既可在iDRAC的SSH会话中本地执行,也可在管理机上通过 racadm -r <iDRAC_IP> -u <user> -p <pass> 远程执行。它覆盖了绝大多数配置项,是传统批量脚本的主力。
  • Redfish API(HTTPS 443):基于RESTful的现代接口,使用JSON承载数据,与厂商、语言无关。它是当前自动化运维的首选,也是本节重点。

四者的关系可以用一张图看清:Web、SSH、RACADM 最终都作用于iDRAC内部同一套管理数据模型,而Redfish把这套模型以标准化的资源树形式暴露出来,供外部程序直接读写。

iDRAC 访问通道与 Redfish 资源模型 浏览器 / Web UI HTTPS 443 SSH 会话 TCP 22 / racadm RACADM 远程 -r IP -u -p Redfish 客户端 curl / Postman iDRAC 管理控制器 固件 / 许可证 统一数据模型 Redfish 资源树 /redfish/v1 (Service Root) /Systems/System.Embedded.1 /Chassis/System.Embedded.1 /Managers/iDRAC.Embedded.1 /UpdateService /SessionService/Sessions /AccountService/Accounts JSON

Redfish 认证:先拿会话,再发请求

Redfish 支持两种认证方式。最简单的是HTTP Basic 认证,每次请求都在头部带上用户名和密码的Base64编码,适合快速测试:

curl -k -u root:calvin \
  https://192.168.1.100/redfish/v1/Systems/System.Embedded.1 \
  -H "Accept: application/json"

更规范的方式是会话认证:先向 /redfish/v1/SessionService/Sessions 发送POST创建会话,服务器返回 X-Auth-Token 响应头和会话资源URI,后续请求携带该Token即可,最后DELETE会话URI注销。会话认证避免了密码在每次请求中传输,也便于审计。注意Dell出厂默认账号为 root,默认密码为 calvin,生产环境必须第一时间修改。

资源树结构:从Service Root出发

Redfish 的一切都从 /redfish/v1 这个Service Root开始。它返回一个JSON文档,其中包含若干导航链接(@odata.id),指向下一层集合。理解这棵树,就能定位任何数据:

  • /Systems/System.Embedded.1:主机系统,包含 PowerState(电源状态)、Status(健康状态)、Processors、Memory、Storage、EthernetInterfaces 等子资源,是获取硬件清单的核心入口。
  • /Chassis/System.Embedded.1:机箱视角,包含 Thermal(温度与风扇)、Power(功耗)等环境数据。
  • /Managers/iDRAC.Embedded.1:iDRAC自身,可读取固件版本、网络配置,也可通过其下的 Actions 执行重置等操作。
  • /UpdateService:固件更新服务,支持SimpleUpdate动作。
  • /SessionService/Sessions、/AccountService/Accounts:会话与账号管理。

常用方法:GET / POST / PATCH

Redfish 使用标准HTTP动词,语义清晰:

方法用途典型示例
GET读取资源获取电源状态、硬件清单、健康摘要
POST创建资源或触发动作创建会话、开机/关机、固件更新
PATCH修改已有属性修改iDRAC网络配置、BIOS设置
DELETE删除资源注销会话、删除账号

下面用curl演示三个最常用的读取操作。所有命令中的IP、账号均为示例,实际使用时替换为你的环境参数。

获取电源状态:

curl -k -s -u root:calvin \
  https://192.168.1.100/redfish/v1/Systems/System.Embedded.1 \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['PowerState'])"

返回 On 表示主机已开机,Off 表示关机。这是批量巡检中最常判断的字段之一。

获取健康摘要:

curl -k -s -u root:calvin \
  https://192.168.1.100/redfish/v1/Systems/System.Embedded.1 \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['Status'])"

返回形如 {'Health': 'OK', 'State': 'Enabled'}。Health 可能为 OK、Warning、Critical,是判断是否需要介入的关键依据。

获取硬件清单(处理器与内存):

curl -k -s -u root:calvin \
  https://192.168.1.100/redfish/v1/Systems/System.Embedded.1/Processors \
  | python3 -m json.tool

curl -k -s -u root:calvin \
  https://192.168.1.100/redfish/v1/Systems/System.Embedded.1/Memory \
  | python3 -m json.tool

Processors 集合会列出每个CPU的型号、核心数、主频;Memory 集合会列出每条内存的容量、速率、位置和健康状态。批量场景下,把这些字段抽取成CSV,就得到了一份完整的资产清单。

用PATCH修改配置

读取之外,PATCH 用于修改属性。例如修改iDRAC的静态IP,需要向 /redfish/v1/Managers/iDRAC.Embedded.1/EthernetInterfaces/NIC.1 发送PATCH:

curl -k -s -u root:calvin -X PATCH \
  https://192.168.1.100/redfish/v1/Managers/iDRAC.Embedded.1/EthernetInterfaces/NIC.1 \
  -H "Content-Type: application/json" \
  -d '{"IPv4StaticAddresses":[{"Address":"192.168.1.150","SubnetMask":"255.255.255.0","Gateway":"192.168.1.1"}]}'
注意:PATCH 修改网络配置后,iDRAC会短暂断开连接,原IP将失效。批量下发前务必确认新IP可达,并保留带外恢复手段(如本地KVM或DHCP回退),否则可能失去对服务器的远程控制。

Postman 辅助调试

在编写脚本前,建议用Postman先验证请求。配置要点:关闭SSL证书校验(Settings → General → SSL certificate verification 设为OFF),在Authorization标签选择Basic Auth填入账号密码,或先POST创建会话后在Headers中手动添加 X-Auth-Token。Postman能直观展示返回的JSON层级,便于确认字段路径,再把验证过的请求翻译成curl或Python代码。

批量运维的推荐路径:先用Postman或单条curl确认资源路径和字段名,再封装成循环脚本遍历IP列表,最后把结果汇总为表格。Redfish的标准化JSON让这一步比解析RACADM文本输出可靠得多。

掌握以上内容后,你已经能够独立完成"认证—定位资源—读取状态—修改配置"的完整闭环。下一阶段的所有批量操作,本质上都是这套模式的规模化重复。