一、Redfish API:服务器管理的瑞士军刀
作为一名常年和服务器打交道的运维老兵,我见过太多凌晨三点被叫起来手动配置BIOS的惨剧。直到遇见Redfish这个神器,才发现原来服务器管理可以像点外卖一样简单。Redfish是一种基于RESTful的API标准,专门为服务器硬件管理而生,联想服务器全线产品都支持这个协议。
想象一下这样的场景:你管理着上百台联想SR650服务器,某天突然需要统一开启所有机器的硬件虚拟化功能。传统方式得挨个登录iDRAC界面操作,现在只需要几行Python代码就能搞定。这就是Redfish的魅力所在!
# 技术栈:Python + requests
import requests
import json
# 定义基础连接参数
idrac_ip = "192.168.1.100"
username = "admin"
password = "calvin" # 联想服务器默认密码
# 创建会话
session = requests.Session()
session.auth = (username, password)
session.verify = False # 自签名证书时需要
# 获取BIOS当前配置
bios_uri = f"https://{idrac_ip}/redfish/v1/Systems/System.Embedded.1/Bios"
response = session.get(bios_uri)
bios_config = response.json()
print("当前虚拟化设置:", bios_config['Attributes']['IntelVTForDirectedIO'])
二、启动项配置:从手工点击到精准控制
服务器启动顺序调整是个高频操作,特别是需要从PXE安装系统时。传统方式需要在BIOS里反复按F2,现在通过API可以精准控制每个细节。联想服务器的Redfish实现提供了完整的启动项管理接口。
让我们看个实际案例:需要将某台服务器的启动顺序临时改为U盘优先,安装完系统后再恢复原状。整个过程可以完全自动化:
# 技术栈:Python + requests
# 先获取当前启动设置
boot_uri = f"https://{idrac_ip}/redfish/v1/Systems/System.Embedded.1"
current_settings = session.get(boot_uri).json()
# 备份原启动顺序
original_order = current_settings['Boot']['BootSourceOverrideTarget']
# 设置为U盘启动
patch_data = {
"Boot": {
"BootSourceOverrideTarget": "UefiUsbFlashDrive",
"BootSourceOverrideEnabled": "Once"
}
}
response = session.patch(
boot_uri,
headers={'Content-Type': 'application/json'},
data=json.dumps(patch_data)
)
# 安装完成后恢复原设置
restore_data = {
"Boot": {
"BootSourceOverrideTarget": original_order,
"BootSourceOverrideEnabled": "Disabled"
}
}
session.patch(boot_uri, json=restore_data)
三、硬件虚拟化开关:云环境的关键配置
在虚拟化环境中,Intel VT-d这类硬件辅助虚拟化技术直接影响着虚拟机性能。通过Redfish管理这些参数,比传统BIOS操作可靠得多。联想服务器的BIOS参数通过标准的Redfish接口暴露,包括所有虚拟化相关选项。
下面示例展示如何批量开启多台服务器的VT-d功能:
# 技术栈:Python + concurrent.futures
from concurrent.futures import ThreadPoolExecutor
# 定义服务器列表
servers = [
{"ip": "192.168.1.100", "auth": ("admin", "calvin")},
{"ip": "192.168.1.101", "auth": ("admin", "calvin")}
]
def enable_vtd(server):
session = requests.Session()
session.auth = server['auth']
# 构造修改请求
bios_uri = f"https://{server['ip']}/redfish/v1/Systems/System.Embedded.1/Bios/Settings"
payload = {
"Attributes": {
"IntelVTForDirectedIO": "Enabled",
"IntelVTDCoherencySupport": "Enabled"
}
}
# 提交修改
response = session.patch(
bios_uri,
headers={'Content-Type': 'application/json'},
json=payload
)
return response.status_code
# 并行执行配置
with ThreadPoolExecutor(max_workers=5) as executor:
results = executor.map(enable_vtd, servers)
for result in results:
print(f"配置结果状态码:{result}")
四、实战中的经验与陷阱
在实际运维中,我总结了几个Redfish API使用的黄金法则:
- 幂等性设计:所有修改操作都要考虑重试机制,因为网络波动可能导致请求失败
- 参数验证:联想不同型号服务器支持的BIOS参数可能有细微差别
- 变更审计:重要配置修改前建议先备份当前设置
这里分享一个完整的配置检查脚本,包含错误处理和日志记录:
# 技术栈:Python + logging
import logging
from datetime import datetime
logging.basicConfig(
filename=f"bios_config_{datetime.now().strftime('%Y%m%d')}.log",
level=logging.INFO
)
def safe_config_update(server_ip, config):
try:
bios_uri = f"https://{server_ip}/redfish/v1/Systems/System.Embedded.1/Bios/Settings"
response = session.patch(bios_uri, json=config)
if response.status_code == 200:
logging.info(f"{server_ip} 配置更新成功")
return True
else:
logging.error(f"{server_ip} 配置失败,状态码:{response.status_code}")
return False
except Exception as e:
logging.error(f"{server_ip} 发生异常:{str(e)}")
return False
# 使用示例
vtd_config = {
"Attributes": {
"IntelVTForDirectedIO": "Enabled",
"ProcVirtualization": "Enabled"
}
}
safe_config_update("192.168.1.100", vtd_config)
五、技术全景与应用展望
Redfish在联想服务器上的实现只是硬件管理自动化的一个缩影。结合Ansible等运维工具,可以构建完整的自动化运维流水线。比如这个Ansible playbook示例:
# 技术栈:Ansible
- name: 配置联想服务器BIOS
hosts: lenovo_servers
gather_facts: no
tasks:
- name: 启用硬件虚拟化
uri:
url: "https://{{ inventory_hostname }}/redfish/v1/Systems/System.Embedded.1/Bios/Settings"
method: PATCH
body:
Attributes:
IntelVTForDirectedIO: "Enabled"
ProcVirtualization: "Enabled"
body_format: json
user: "admin"
password: "calvin"
validate_certs: no
register: result
- name: 验证配置
uri:
url: "https://{{ inventory_hostname }}/redfish/v1/Systems/System.Embedded.1/Bios"
method: GET
user: "admin"
password: "calvin"
validate_certs: no
register: bios_status
- name: 输出配置结果
debug:
msg: "当前虚拟化状态:{{ bios_status.json.Attributes.IntelVTForDirectedIO }}"
从单机操作到集群管理,Redfish正在重塑服务器运维的工作方式。特别是在混合云场景下,通过统一API管理不同厂商的硬件设备,这种标准化带来的效率提升是革命性的。
未来随着DPU等新技术普及,硬件管理API会变得更加重要。建议运维团队现在就开始积累Redfish的使用经验,这绝对是笔值得的投资。毕竟,谁不想把时间花在更有价值的事情上,而不是反复点击BIOS界面呢?
评论