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 ...
随机推荐
- 新建cordova应用,插件开发教程系列(总目录)
以下几篇是连续的教程,代码也是连续的,包括如下章节: 新建cordova应用 https://www.cnblogs.com/cannel/p/11074359.html 使用cordova把h5应用 ...
- Sql Server 2008R2升级 Sql Server 2012 问题
环境: Windows server 2008 r2 Standard +SqlServer2008R2 内网环境需要升级为SQL server 2012 升级安装时提示版本不支持 网上查询相关问题 ...
- scriptPubKey and scriptSig
First of all two matching scripts are used in two different transactions, one that transfers funds t ...
- libs/tools.js stringToDate dateToString 日期字符串转换函数
libs/tools.js stringToDate dateToString 日期字符串转换函数 import { stringToDate } from '@/libs/tools.js' e ...
- windows10家庭版 远程桌面报错
windows10家庭版 远程桌面报错“要求的函数不受支持 ...”,Windows没有编辑组策略选项(gpedit.msc),所以无法按照微软提供的方法来修改组策略.所以我们需要修改注册表的方法来修 ...
- sqlserver差异备份3117
1.出现错误"3117" 2.完整备份/选项/不对数据库执行任何操作 3.数据库显示"正在还原" 4.差异备份/选项/回滚 5.数据库完整备份与差异备份成功
- [LOJ] 分块九题 2
https://loj.ac/problem/6278 区间修改,查询区间第k大. 块内有序(另存),块内二分. 还是用vector吧,数组拷贝排序,下标搞不来.. //Stay foolish,st ...
- 10. GLOBAL_STATUS 与 SESSION_STATUS
10. GLOBAL_STATUS 与 SESSION_STATUS 注意 从MySQL 5.7.6开始,show_compatibility_56系统变量的值会影响此处描述的表中的可用信息. 有关详 ...
- 深入Linux内核架构——锁与进程间通信
Linux作为多任务系统,当一个进程生成的数据传输到另一个进程时,或数据由多个进程共享时,或进程必须彼此等待时,或需要协调资源的使用时,应用程序必须彼此通信. 一.控制机制 1.竞态条件 几个进程在访 ...
- 《算法导论》 — Chapter 10 基本数据结构
序 在本章中,要讨论如何通过使用了指针的简单数据结构表示动态集合.有很多的复杂的数据结构可以用指针来构造,本章介绍几种基本数据结构,包括栈.队列.链表,以及有根树. GitHub 第十章 程序实现代码 ...