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 ...
随机推荐
- 个人作业(alpha)
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cn ...
- 【HEVC简介】High Level Syntax
参考文献:见<High Efficiency Video Coding (HEVC)>High Level Syntax章节 <HEVC标准介绍.HEVC帧间预测论文笔记>系列 ...
- mysql use index() 优化查询
mysql use index() 优化查询 FORCE INDEX/IGNORE INDEX 的语法: SELECT *** FROM TABLE [{USE|IGNORE|FORCE} INDEX ...
- 在DLL中创建窗口时一个值得注意的地方 — UnregisterClass
背景描述: 今天要测试一份注入代码,拿以前写的创建窗口的DLL来做测试. 第一次注入时一切正常,窗口被成功创建并显示,但在第二次加载时窗口没有显示出来. 经过研究发现在第二次加载DLL时Registe ...
- 如何处理Docker的错误消息request canceled:Docker代理问题
在本地安装Kubernetes时,遇到错误消息: request canceled while waiting for connection(Client.Timeout exceeded while ...
- HDU 5778 abs (暴力枚举)
abs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem De ...
- Java 游戏报错 看不懂求教
Java 飞机小游戏 报错 看不懂求救 at java.awt.Component.dispatchEvent(Unknown Source)at java.awt.EventQueue.dispat ...
- 《3+1团队》【Alpha】Scrum meeting 1
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...
- 【lua实战摸索】在b.lua调用a.lua的函数
需要掌握知识: lua table的使用(创建自己函数的表作为函数库) 普通函数的调用:tab.func(tab,参数) 等效于表中函数的调用tab:func(参数) 基本思路: 1.在相同目录下创建 ...
- intellij idea关闭重复代码提醒