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把这套模型以标准化的资源树形式暴露出来,供外部程序直接读写。
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"}]}'
Postman 辅助调试
在编写脚本前,建议用Postman先验证请求。配置要点:关闭SSL证书校验(Settings → General → SSL certificate verification 设为OFF),在Authorization标签选择Basic Auth填入账号密码,或先POST创建会话后在Headers中手动添加 X-Auth-Token。Postman能直观展示返回的JSON层级,便于确认字段路径,再把验证过的请求翻译成curl或Python代码。
掌握以上内容后,你已经能够独立完成"认证—定位资源—读取状态—修改配置"的完整闭环。下一阶段的所有批量操作,本质上都是这套模式的规模化重复。