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 ...
随机推荐
- 写给技术lead的招聘指南
工作这么久,面试过的工程师不下两三百人.大部份招到的人都比靠谱当然也有失败的例子.把亲身经历总结如下: 1. 什么人一定不能招: 理解能力差: 对你提出的问题,答不对题,重复提问.面试官可以在面试当中 ...
- 【译】OpenStack Heat基础介绍
原文:http://blog.scottlowe.org/2014/05/01/an-introduction-to-openstack-heat/ 本文将简要地介绍OpenStack Heat. H ...
- Long time no blogging
It is a long time before I posted the last blog on myspace and seems that all of my blogs/documents ...
- 1《数学之美》第1章 文字和语言 vs 数字和信息
1<数学之美>第1章 文字和语言 vs 数字和信息
- react开启一个项目 webpack版本出错
npx create-react-app my-app cd my-app npm start 在命令行里执行以上语句就可(前两天刚刚发现,最新版的react对webpack的版本要了新要求,大概是他 ...
- 第 6 章 Cinder - 061 - Boot from Volume
Boot from Volume Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume). 打开 instance 的 launch 操作界面. 这 ...
- qcloudsms_py
qcloudsms_py from qcloudsms_py import SmsVoicePromptSender from qcloudsms_py.httpclient import HTTPE ...
- Linux常用命令大全2
Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.驱动.键盘.鼠标,还是用户等都是文件,Linux命令是它正常运行的核心.接下来,就来看看xp系统下载编辑 ...
- java session cookie的使用
Cookie; Session; URL重写; cookie在J2EE项目中的使用,Java中把Cookie封装成了java.servlet.http.Cookie类.每个Cookie都是该Cooki ...
- Melancholy(磨懒虫主义)
题目大意:给出n个地点和q个询问.其中每个地点有距离和权值,每个询问给出l,r,k,表示在[l,r]区间内不取最小点的情况下任取k个,求所有情况权值之积之和(n,q<=1e5,k<=6). ...