DELL IDRAC API接口开发文档翻译及client模块
今天和DELL官网要了一份关于服务器IDRAC 版本7/8 的API开发文档,花了一天的时间,进行了翻译,不一定全部准确,但对于英语不好的人会有所帮助。也不用重复造轮子了。
下载链接:
DELL IDRAC7/8 硬件监控client模块
#!/opt/python3/bin/python3
#Author: zhaoyong
'''
本模块用于DELL 服务器IDARC API接口,只用于检测硬件状态,检测硬件包括如下:
< CPU, 内存, 磁盘, 电源, 风扇, raid卡>
注意:只支持IDRAC版本7和版本8
注意:只提取URL:/redfish/v1/Systems/System.Embedded.1 下的信息
'''
import requests, json class idrac_api(object):
'''
DELL powerEdge服务器IDRAC 7/8 API 硬件监控客户端接口
''' def __init__(self, ip, username, passwd):
self.__ip = ip
self.__username = username
self.__passwd = passwd
# 服务器连接tokin对象
self.__s_tokin = ''
# 第一次访问提取的元数据,字典格式
self.__meta_data_dict = '' def conn(self):
'''
连接服务器
:return:
'''
# SSL验证会提示警告,这里进行关闭警告信息的提示
requests.packages.urllib3.disable_warnings()
# 初始化一个session连接
c = requests.Session()
c.timeout = 60
# 设置验证信息
c.auth = (self.__username, self.__passwd)
# 关闭SSL验证
c.verify = False
# 连接IDRAC并进行身份验证和原始数据的提取
auth_url = 'https://%s/redfish/v1/Systems/System.Embedded.1' % (self.__ip)
try:
conn_status = c.get(auth_url)
# 如果连接成功,将session对象赋予self.__s_tokin,获取的元数据赋予self.__meta_data_dict,否则报错
if conn_status.ok:
self.__s_tokin = c
self.__meta_data_dict = conn_status.json()
else:
err_info = conn_status.raise_for_status()
# print('----->',err_info)
return '服务器: %s IDRAC连接失败,错误信息:%s' % (self.__ip, err_info)
except Exception as e:
return '服务器: %s IDRAC连接失败,错误信息:%s' % (self.__ip, e) def memory_status(self):
'''
检测内存
输出格式:MemorySummary {'Status': {'Health': 'OK', 'HealthRollUp': 'OK', 'State': 'Enabled'}, 'TotalSystemMemoryGiB': 64.0}
:return: 返回内存状态
'''
mem_status = self.__meta_data_dict['MemorySummary']['Status']['Health']
return mem_status def cpu_status(self):
'''
检测CPU
输出格式:ProcessorSummary {'Count': 2, 'Model': 'Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz', 'Status': {'Health': 'OK', 'HealthRollUp': 'OK', 'State': 'Enabled'}}
:return:返回CPU状态
'''
cpu_status = self.__meta_data_dict['ProcessorSummary']['Status']['Health']
return cpu_status def sn(self):
'''
提取服务的SN,暂时不需要
:return: 返回SN码
'''
sn_str = self.__meta_data_dict['SKU']
return sn_str def disk_status(self):
'''
硬盘检测输出:
SimpleStorage {'@odata.id': '/redfish/v1/Systems/System.Embedded.1/Storage/Controllers'}
Status {'Health': 'OK', 'HealthRollUp': 'OK', 'State': 'Enabled'}
如果总体检测结果为OK,直接返回默认字典
否则将详细检查每一个磁盘和raid卡,将有故障的设备名称写入返回的字典
:return: 返回硬盘和raid卡状态
'''
disk_result= {'raid_card':'OK','pre_disk':'OK'}
disk_check = self.__meta_data_dict['Status']['Health']
if disk_check != 'OK':
d_url_str = 'https://%s%s' % (self.__ip, self.__meta_data_dict['SimpleStorage']['@odata.id'])
member_out = self.__s_tokin.get(d_url_str).json()
member_url_str = 'https://%s%s' % (self.__ip, member_out['Members'][0]['@odata.id'])
pre_disk_out = self.__s_tokin.get(member_url_str).json()
if pre_disk_out['Status']['Health'] != 'OK':
disk_result['raid_card'] = pre_disk_out['Name']
for pd in pre_disk_out['Devices']:
if pd['Status']['Health'] != 'OK':
disk_result['pre_disk'] = pd['Name'] return disk_result def power_status(self):
'''
电源检测
:return: 返回电源状态
'''
pow_status = {}
power_url_list = self.__meta_data_dict['Links']['PoweredBy']
for p in power_url_list:
p_url = 'https://%s%s' % (self.__ip, p['@odata.id'])
p_dict = self.__s_tokin.get(p_url).json()
pow_status[p_dict['Name']] = p_dict['Status']['Health']
return pow_status def fan_status(self):
'''
风扇检测
:return:统一返回风扇整体状态
'''
fan_status={'fan':'OK'}
fan_all_list = self.__meta_data_dict['Links']['CooledBy']
for f in fan_all_list:
f_url_str = 'https://%s%s' % (self.__ip, f['@odata.id'])
fan_out = self.__s_tokin.get(f_url_str).json()
if fan_out['Status']['Health'] != 'OK':
fan_status['fan'] = fan_out['FanName']
return fan_status
return fan_status def hardware_status(self):
'''
收集所有硬件信息
:return: 返回json格式数据
'''
out = []
ck_result = {}
ck_result['cpu'] = self.cpu_status()
ck_result['memory'] = self.memory_status()
ck_result['disk'] = self.disk_status()['pre_disk']
ck_result['raid_card'] = self.disk_status()['raid_card']
ck_result['power1'] = self.power_status()['PS1 Status']
ck_result['power2'] = self.power_status()['PS2 Status']
ck_result['fan'] = self.fan_status()['fan']
# 提取故障设备
for s in ck_result:
if ck_result[s] != 'OK':
out.append(ck_result[s])
if len(out) == 0:
out.append('OK')
# 以字符串返回故障设备,否则返回OK,表示无故障
return ','.join(out) if __name__ == '__main__':
'''
运行主程序,测试使用
'''
out = idrac_api('IDRAC IP', '账号', '密码')
# 连接服务器
mess = out.conn()
# 有错误就打印报错信息并exit
if mess:
exit(mess)
# 以字符串打印检测结果
result = out.hardware_status()
print(result)
DELL IDRAC API接口开发文档翻译及client模块的更多相关文章
- API接口开发 配置、实现、测试
Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...
- 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...
- 示例浅谈PHP与手机APP开发,即API接口开发
示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...
- F5 api接口开发实战手册(二)
F5 rest api 各对象使用方式详解 本篇文章介绍rest api接口下Collection.Resource.Subcollections.SubResource的各种使用方法.如果您不了解这 ...
- 利用postman进行api接口开发
场景: api接口开发时,经常使用一些工具来帮助设计开发.Yapi主要是在设计阶段进行api接口设计,统一前后端参数请求和返回体:swagger主要在开发阶段,用来显示实际上后端开发进度和接口情况:p ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载
转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人一.先简单回答两个问题:1.PHP 可以开发客户端?答:不可以, ...
- Restful风格API接口开发springMVC篇
Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...
- 浅谈PHP与手机APP开发(API接口开发)
了解PHP与API开发 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK ...
随机推荐
- Data Center Manager Leveraging OpenStack
这是去年的一个基于OpenStack的数据中心管理软件的想法. Abstract OpenStack facilates users to provision and manage cloud ser ...
- mysql-mmm 部署高可用集群
集群的部署(mysql-mmm + 主从同步) 什么是集群? 多台服务器提供相同的服务 集群的好处? 节省成本. 配置集群? 准备环境:准备4台数据库服务器 准备服务器,能够ping 4 台数据库服务 ...
- 【整理】 vue-cli 打包后显示favicon.ico小图标
vue-cli 打包后显示favicon.ico小图标 https://www.cnblogs.com/mmzuo-798/p/9285013.html
- django insert data into mysql
#!/usr/bin/python # -*- coding:utf-8 -*- # @filename: search # @author:wwx399777 wuweiji # @date: 20 ...
- 拖拽功能-jquery
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- <Spring Cloud>入门二 Eureka Client
1.搭建一个通用工程 1.1 pom 文件 <?xml version="1.0" encoding="UTF-8"?> <project x ...
- (3) openssl genrsa(生成rsa私钥)
genrsa用于生成RSA私钥,不会生成公钥,因为公钥提取自私钥,如果需要查看公钥或生成公钥,可以使用openssl rsa命令. 使用man genrsa查询其用法. openssl genrsa ...
- Ubuntu中python链接本地数据库
由于python链接数据库需要下载DB API模块:例如你需要访问Mysql数据,你需要MySQL数据库模块. DB-API是一个规范. 以便为不同的底层数据库系统和数据库接口程序提供一致的访问接口. ...
- 二手GTX650
某鱼入手一二手华硕显卡GTX650 店主信誉挺高的,到手图片 我K,被骗了翻新的假显卡,华硕没有过这个样式的GTX650啊,还是新的散热风扇及前挡板,不管了先把风扇拆了,竟然连风扇散热硅脂都是刚刚涂上 ...
- centos6 下FastDFS 在storage节点上nginx的fastdfs-nginx-module 模块编译出现的问题
centos6.6 下FastDFS 在storage节点上 make(编译)nginx的fastdfs-nginx-module 出现如下报错: /root/fastdfs-nginx-mo ...