戴尔R740服务器获取cpu、内存、硬盘参数信息。
admin
2023-02-23 09:00:10
0

戴尔R740服务器获取cpu、内存、硬盘参数信息。使用redfish协议,只使用了system的一个总URL即可获取所有参数。


import requests
import json
requests.packages.urllib3.disable_warnings()

##使用一个system总的URL分别获取到cpu、内存、存储三个url.所以只修改system的URL即可
##sel日志单独使用URL获取

class GetHostInfo(object):
    def __init__(self,ipaddr,username,password):
        self.URLprefix='https://'+ipaddr.strip()
        self.username=username.strip()
        self.password=password.strip()
        global token    ##同时存在4-5个token链接,每个token链接时间为5分钟,可以自己设置。
        token=0
        tokenurl=self.URLprefix+'/redfish/v1/Sessions'  ##dell获取token的ID
        print(tokenurl)
        data={
            "UserName":self.username,
            "Password":self.password
            }
        header={
            "Content-Type":"application/json"
            }
        re1=requests.post(tokenurl,json.dumps(data),headers=header,verify=False)
        #re1=requests.post(tokenurl,auth=(self.username,self.password),headers=header,verify=False)
        print (re1.status_code)
        if re1.status_code == 201:
            #print (re1.json())
            #print (re1.headers)
            print (re1.headers['X-Auth-Token'])
            token=re1.headers['X-Auth-Token']
        else:
            pass
    def GetInfo(self,URL_suffix):  #定义总获取函数,传参url的后半部分。如'/redfish/v1/Systems/1/Memory'
        urlset=self.URLprefix+URL_suffix
        if token !=0:
            header = {
                "Content-Type":"application/json",
                "X-Auth-Token":token
                }
            re1=requests.get(urlset,headers=header,verify=False)
            print(re1.status_code)
            return re1.json()
        else:
            pass

def Collect_Info(ipaddr,username,password):
    dell740=GetHostInfo(ipaddr,username,password)
    ####total_system_URL收集/redfish/v1/Systems/System.Embedded.1
    select_system_total = '/redfish/v1/Systems/System.Embedded.1'
    #print('cpu_total', hw2288HV5.GetInfo(select_cpu_total))
    temp_system_result1= dell740.GetInfo(select_system_total)
    if isinstance(temp_system_result1,dict) and ('error' not in  temp_system_result1.keys() ):
        ##处理cpu
        cpu = temp_system_result1['Processors']['@odata.id']  ##获取CPU的URL
        #print ('Processors',dell740.GetInfo(cpu))
        cpu_result1 = dell740.GetInfo(cpu)
        cpu_count = cpu_result1['Members@odata.count']
        cpu_URLsuffix_list = [x['@odata.id'] for x in cpu_result1['Members']]
        print('CPU count:', cpu_count)
        for single_cpuurl in cpu_URLsuffix_list:
            singlecpu_result2= dell740.GetInfo(single_cpuurl)
            if isinstance(singlecpu_result2, dict) and ('error' not in singlecpu_result2.keys()):
                #print ('singlecpu_result2',singlecpu_result2)
                print('CPU single name:', singlecpu_result2['Name'])
                print('CPU single ID:', singlecpu_result2['Id'])
                print('CPU single TotalCores(cpus):', singlecpu_result2['TotalCores'])
                print('CPU single Model(cpus):', singlecpu_result2['Model'])

        ###处理内存
        memory = temp_system_result1['Memory']['@odata.id']  ##获取内存的URL
        memory_result1 = dell740.GetInfo(memory)
        memory_count = memory_result1['Members@odata.count']
        memory_URLsuffix_list = [x['@odata.id'] for x in memory_result1['Members']]
        print ('Memory count:',memory_count)
        for single_memoryurl in memory_URLsuffix_list:
            singlememory_result2 = dell740.GetInfo(single_memoryurl)
            if isinstance(singlememory_result2, dict) and ('error' not in singlememory_result2.keys()):
                #print('singlecpu_result2', singlememory_result2)
                print('Memory name:', singlememory_result2['Name'])
                print('Memory ID:', singlememory_result2['Id'])
                print('Memory Size:', singlememory_result2['CapacityMiB'])
                print('Memory Type:', singlememory_result2['MemoryDeviceType'])

        ##处理存储
        storage = temp_system_result1['Storage']['@odata.id']  ##获取存储URL
        #print ('storage',dell740.GetInfo(storage))
        storage_result1 = dell740.GetInfo(storage)
        storage_URLsuffix_list = [x['@odata.id'] for x in storage_result1['Members']]
        for single_storageurl in storage_URLsuffix_list:
            singlestorage_result2 = dell740.GetInfo(single_storageurl)
            if isinstance(singlestorage_result2, dict) and ('error' not in singlestorage_result2.keys()):
                #print('singlecpu_result2', singlestorage_result2)
                disk_count=singlestorage_result2['Drives@odata.count']
                print('disk count:',disk_count)
                print('storage name:',singlestorage_result2['Id'])
                if disk_count >0: ##有的URL中disk为0,不需要去获取值
                    single_disk_URLsuffix_list = [x['@odata.id'] for x in singlestorage_result2['Drives']]
                    for disk_single in single_disk_URLsuffix_list:
                        single_disk_result1 = dell740.GetInfo(disk_single)
                        if isinstance(single_disk_result1, dict) and ('error' not in single_disk_result1.keys()):
                            #print ('single_disk_result1',single_disk_result1)
                            print('disk name:', single_disk_result1['Name'])
                            print('disk ID:', single_disk_result1['Id'])
                            print('disk CapacityBytes:', single_disk_result1['CapacityBytes'])
                            print('disk MediaType:', single_disk_result1['MediaType'])
                        else:
                            pass
    ##获取sel日志
    logurlsuffix = '/redfish/v1/Managers/iDRAC.Embedded.1/Logs/Sel'  ##日志sel
    sellog=dell740.GetInfo(logurlsuffix)
    if isinstance(sellog,dict) and ('error' not in  sellog.keys() ):
        print('SEL log:',sellog)

if __name__ == '__main__':
    Collect_Info('10.252.209.7', 'username', 'password')

相关内容

热门资讯

玩家最新攻略“乐暴延边麻将.辅... 玩家最新攻略“乐暴延边麻将.辅助开挂神器?”果然有透视挂您好,乐暴延边麻将这个游戏其实有挂的,确实是...
巴勒斯坦总统呼吁推进“两国方案... 总台记者获悉,当地时间12月21日,巴勒斯坦总统阿巴斯在约旦河西岸城市拉姆安拉会见了一个由以色列和平...
【今日要闻】“友乐广西麻将.辅... 家人们!今天小编来为大家解答友乐广西麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
今日重大消息“新版wepoke... 您好:新版wepoker这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家...
【第一资讯】“阿道夫十三水.辅... 有 亲,根据资深记者爆料阿道夫十三水是可以开挂的,确实有挂(咨询软件无需...
玩家攻略科普“情怀古诗词.开挂... 有 亲,根据资深记者爆料情怀古诗词是可以开挂的,确实有挂(咨询软件无需打...
玩家最新攻略“樱花炸金花.开挂... 网上科普关于“樱花炸金花有没有挂”话题很是火热,小编也是针对樱花炸金花作*弊开挂的方法以及开挂对应的...
盐城固态电池产线落地经开区,未... 12月21日,固态离子能源科技(武汉)有限公司在盐城举办固态动力电池技术成果发布活动,中外行业专家、...
玩家分享攻略“YY棋牌.辅助开... 网上科普关于“YY棋牌有没有挂”话题很是火热,小编也是针对YY棋牌作*弊开挂的方法以及开挂对应的知识...
重磅消息“衡阳十胡卡.开挂器?... 重磅消息“衡阳十胡卡.开挂器?”确实真的有挂您好,衡阳十胡卡这个游戏其实有挂的,确实是有挂的,需要了...