【SSD测试专题7】通过redfish 获取BMC上盘片信息

一、什么是redfish

BMC Redfish 指的是基于 Redfish API 的 BMC(Baseboard Management Controller,主板管理控制器)实现。在计算机系统中,BMC 是一种专用的微控制器,通常集成在服务器、工作站和其他计算设备的主板上,用于远程管理和监控这些设备。

Redfish API 是一种由 DMTF(分布式管理任务组)制定的开放标准,用于管理和监控硬件设备。BMC Redfish 则是指通过 Redfish API 实现的 BMC 功能,这使得管理员和运维人员可以通过标准化的RESTful接口,对服务器和相关设备进行统一、跨平台的管理。

使用 BMC Redfish,用户可以通过标准化的REST API执行诸如获取传感器数据、配置设备设置、执行电源控制等操作,而无需依赖于传统的基于CLI(命令行界面)或基于Web的管理界面。这种标准化的接口简化了设备管理和自动化操作,有助于提高管理效率和降低操作成本

二、如何判断服务器是否支持redfish

通常情况下我们访问服务器BMC时,可以再地址后面加上/redfish/v1/进行查看确认,如果支持,浏览器页面将直接返回Json数据,如下图所示
在这里插入图片描述

三、如何获取

由于各个BMC厂家对于redfish的支持和定制,ssd的设备信息可能会放在不同的节点,有的是放在drives节点下,有的是放在PCIeDevice下,因此可以通过Python 脚本进行简单的遍历

#coding: utf-8
from redfish import redfish_client
from requests.auth import HTTPBasicAuth
import requests
# 替换为你的 BMC 的 IP 地址、用户名和密码
bmc_ip = '192.168.x.xxx'
username = 'xxxx'
password = 'xxxx'
def get_bmc_management_info(client):
    """ 获取BMC的管理信息 """
    try:
        # 获取BMC的Root资源
        root_resp = client.get('/redfish/v1')

        #获取Chassis资源子节点上的nvme信息
        chassis_resp = client.get('/redfish/v1/')
        traverse_ris_object(chassis_resp.obj)
    except Exception as e:
        print(f"Failed to retrieve BMC management info: {str(e)}")

def traverse_ris_object(ris_object, indent=0):
    """ 遍历并打印RisObject对象 """
    if isinstance(ris_object, dict):
        for key, value in ris_object.items():
            if isinstance(value, dict) or isinstance(value, list):
                print('  ' * indent + f'{key}:')
                traverse_ris_object(value, indent + 1)
            else:
                print('  ' * indent + f'{key}: {value}')
    elif isinstance(ris_object, list):
        for item in ris_object:
            traverse_ris_object(item, indent)


if __name__ == "__main__":
    # 创建Redfish客户端实例
    client = redfish_client(bmc_ip, username=username, password=password)

    try:
        # 连接到BMC
        client.login()

        # 获取BMC的管理信息
        get_bmc_management_info(client)

    finally:
        # 关闭Redfish客户端连接
        client.logout()

通过逐级遍历即可获得想要的信息
以某国产服务器为例,如当SSD设备的信息挂在再links->drives下时

        for item in chassis_resp.obj['Links']['Drives']:
            storage_url = item['@odata.id']
            get_resp = client.get(storage_url)
            print(get_resp)
        storage_url = chassis_resp.obj['Links']['Drives']
        for item in storage_url:
            disk = client.get(item['@odata.id'])
            print(disk)

即可获得,通常包括设备的容量,接口速率,设备类型,固件版本,温度,制造商信息等。

四、还能通过redfish来做些什么

还可以通过redfish来进行bmc的一些操作,如上下电,用户管理等,BMC页面显示的功能大部分都可以通过redfish接口来进行操作

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值