zoukankan      html  css  js  c++  java
  • python获取esxi的磁盘使用率信息

    #!/usr/bin/python3
    #coding:utf-8
    #Author: ziming
    
    """
    只用于模拟开发功能测试
    """
    from pyVmomi import vim
    from pyVim.connect import SmartConnect, Disconnect, SmartConnectNoSSL
    import sys
    import atexit
    import argparse
    from optparse import OptionParser
    import json
    
    
    class Exsi(object):
    
        # 获取vcenter的相关参数
        def __init__(self, host = 'x.x.x.x', port=443, user = 'zabbix', password='zabbix'):
            self._host = host
            self._port = port
            self._user = user
            self._password = password
    
        def get_obj(self,content, vimtype, name=None):
            '''
            列表返回,name 可以指定匹配的对象
            '''
            container = content.viewManager.CreateContainerView(content.rootFolder, vimtype, True)
            obj = [ view for view in container.view]
            return obj
    
        def get_conn(self):
            # 连接vcenter
            si = SmartConnectNoSSL(
                    host=self._host,
                    user=self._user,
                    pwd=self._password,
                    port=self._port)
            # disconnect this thing
            atexit.register(Disconnect, si)
            content = si.RetrieveContent()
            return content
    
        # 获取exsi的信息ip,磁盘使用情况等
        def get_esxi_host(self):
            esxi_host = {}
            content = self.get_conn()
            esxi_obj = self.get_obj(content, [vim.HostSystem])
            for esxi in esxi_obj:
                esxi_host[esxi.name] = {'datastore':{}}
    
                # for ds in esxi.datastore:
                #     esxi_host[esxi.name]['datastore'][ds.name] = {}
                #     esxi_host[esxi.name]['datastore'][ds.name]['总容量(G)'] = int((ds.summary.capacity)/1024/1024/1024)
                #     esxi_host[esxi.name]['datastore'][ds.name]['空闲容量(G)'] = int((ds.summary.freeSpace)/1024/1024/1024)
                #     esxi_host[esxi.name]['datastore'][ds.name]['类型'] = (ds.summary.type)
    
                total_capacity = 0
                free_capacity = 0
                for ds in esxi.datastore:
                    # esxi_host[esxi.name]['datastore'][ds.name] = {}
                    esxi_host[esxi.name] = {}
                    total_capacity += int((ds.summary.capacity)/1024/1024/1024)
                    free_capacity += int((ds.summary.freeSpace)/1024/1024/1024)
    
                esxi_host[esxi.name]['sotrage_used_percent'] = 100*(total_capacity - free_capacity)/total_capacity
            # print(esxi_host)
            return esxi_host
    
        # 获取exsi的host即ip列表
        def get_esxi_iplist(self):
            esxi_host = self.get_esxi_host()
            data = list()
            for exsi_ip in esxi_host:
                data.append({"{#EXSI_IP}": exsi_ip})
    
            return json.dumps({'data': data}, sort_keys=True, indent=7, separators=(",",":"))
    
        # 获取指定esxi的磁盘信息
        def get_esxi_storageinfo(self, exsi_ip):
            esxi_host = self.get_esxi_host()
    
            return esxi_host[exsi_ip]['sotrage_used_percent']
    
    
    def main():
        try:
    
            usage = "usage: %prog [options]
    gGet exsi Stat"
            parser = OptionParser(usage)
            
            # 接收参数
            parser.add_option("-l", "--list",  
                              action="store_true", dest="is_list", default=False,  help="if list all exsi ip")
            
            parser.add_option("--ip", "--ipaddr", 
                              action="store", dest="ipaddr", type="string", 
                              default="192.168.254.56", help="execute 'exsi info' to see more infomation")
            
            
            (options, args) = parser.parse_args()
            if 1 >= len(sys.argv):
                parser.print_help()
                return
            
            #exsi_ins = Exsi(options.ipaddr)
            exsi_ins = Exsi()
            if options.is_list == True:
                print(exsi_ins.get_esxi_iplist())
                return
    
            # print(redis.ins.get_esxi_storageinfo(optins.ip, exsi_ip = ip))
            print(exsi_ins.get_esxi_storageinfo(options.ipaddr))
    
        except Exception as expt:
            import traceback
            tb = traceback.format_exc()
            print(tb)
    
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    antd vue如何在父组件里打开子组件(子组件是个模态框)?
    webpack知识点整理
    JavaScript中常用的方法汇总,全部整理好了,一定要收藏!
    从地址栏里面获取参数的值
    何为垫片?垫片是一种什么概念在js中?
    async 与 await使用
    纯手撸Promise
    如何使用 Promise?
    Notification 浏览器桌面通知的使用
    学习骨架屏(Skeleton Screens)技术
  • 原文地址:https://www.cnblogs.com/reblue520/p/9630154.html
Copyright © 2011-2022 走看看