今天和DELL官网要了一份关于服务器IDRAC 版本7/8 的API开发文档,花了一天的时间,进行了翻译,不一定全部准确,但对于英语不好的人会有所帮助。也不用重复造轮子了。
下载链接:

IDRAC 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模块的更多相关文章

  1. API接口开发 配置、实现、测试

    Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...

  2. 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  3. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...

  4. F5 api接口开发实战手册(二)

    F5 rest api 各对象使用方式详解 本篇文章介绍rest api接口下Collection.Resource.Subcollections.SubResource的各种使用方法.如果您不了解这 ...

  5. 利用postman进行api接口开发

    场景: api接口开发时,经常使用一些工具来帮助设计开发.Yapi主要是在设计阶段进行api接口设计,统一前后端参数请求和返回体:swagger主要在开发阶段,用来显示实际上后端开发进度和接口情况:p ...

  6. 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载

    转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...

  7. 浅谈 PHP 与手机 APP 开发(API 接口开发)

    本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人一.先简单回答两个问题:1.PHP 可以开发客户端?答:不可以, ...

  8. Restful风格API接口开发springMVC篇

    Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...

  9. 浅谈PHP与手机APP开发(API接口开发)

    了解PHP与API开发 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK ...

随机推荐

  1. 新建cordova应用,插件开发教程系列(总目录)

    以下几篇是连续的教程,代码也是连续的,包括如下章节: 新建cordova应用 https://www.cnblogs.com/cannel/p/11074359.html 使用cordova把h5应用 ...

  2. 第3章 接口与API设计 52条笔记

    第3章 接口与API设计 52条笔记 第15条: 用前缀避免命名空间冲突 Objective-C 没有其他语言那种内置的命名空间机制 .鉴于此,我们在起名时要设法避免潜在的命名冲突,否则很容易就重名了 ...

  3. .htaccess重写规则失败

    开启mod_rewrite.so LoadModule rewrite_module libexec/apache2/mod_rewrite.so 重启服务 sudo apachectl restar ...

  4. 第17周翻译:SQL Server中的事务日志管理的阶梯:第5级:在完全恢复模式下管理日志

    来源:http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者:Tony Davis, 2012/01/27 翻译:刘琼滨. ...

  5. vue同胞组件通讯解决方案(以下为一种另外可用vuex解决)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. SEO 第九章

    SEO第九章 本次课目标: 1.  外部优化之平台优化 2.  如何撰写SEO诊断方案 一.外部平台优化——百度系列平台 百度系列的平台都是属于百度自己的产品,排名都是比较高的,所以我们在做外部推广的 ...

  7. Hibernate Lazy属性与懒加载 整理

    lazy概念:要用到的时候,再去加载,对于关联的集合来说,只有当访问到的时候,才去加载它所关联的集合,比如一个user对应很多权限,只有当user.getRights()的时候,才发出select r ...

  8. gocode安装不上的解决办法

    mkdir -p $GOPATH/src/golang.org/x  //路径下创建此文件 cd $GOPATH/src/golang.org/x      //切换到此目录 git clone ht ...

  9. 让idea调试不进入class文件中去

  10. Css选择器和JQuery基本编程接口

    使用JQuery之前,首先从官网下载库文件 http://jquery.com/ jquery-2.1.4.js和jquery-2.1.4.min.js,前者是完整无压缩版本,用于开发调试:后者是压缩 ...