vim 报错可以忽略
#!/usr/bin/python3
# coding:utf-8
from pyVmomi import vim
from pyVim.connect import SmartConnect, Disconnect, SmartConnectNoSSL
import atexit
def get_obj(content, vimtype, name=None):
# 列表返回,name 可以指定匹配的对象
container = content.viewManager.CreateContainerView(content.rootFolder, vimtype, True)
obj = [view for view in container.view]
return obj
def get_esxi_all_info():
esxi_host = {}
esxi_list = []
# connect this thing
si = SmartConnectNoSSL(
host='10.23.1xx.xx',
user='rexxxl',
pwd='xxxxx',
port='443')
# disconnect this thing
atexit.register(Disconnect, si)
content = si.RetrieveContent()
esxi_obj = get_obj(content, [vim.HostSystem])
for esxi in esxi_obj:
esxi_host[esxi.name] = {'esxi_info': {}, 'datastore': {}, 'network': {}, 'vm': {}}
esxi_host[esxi.name]['esxi_info']['厂商'] = esxi.summary.hardware.vendor
esxi_host[esxi.name]['esxi_info']['型号'] = esxi.summary.hardware.model
for i in esxi.summary.hardware.otherIdentifyingInfo:
if isinstance(i, vim.host.SystemIdentificationInfo):
esxi_host[esxi.name]['esxi_info']['SN'] = i.identifierValue
esxi_host[esxi.name]['esxi_info']['处理器'] = '数量:%s 核数:%s 线程数:%s 频率:%s(%s) ' % (esxi.summary.hardware.numCpuPkgs,
esxi.summary.hardware.numCpuCores,
esxi.summary.hardware.numCpuThreads,
esxi.summary.hardware.cpuMhz,
esxi.summary.hardware.cpuModel)
try:
esxi_host[esxi.name]['esxi_info']['处理器使用率'] = '%.1f%%' % (esxi.summary.quickStats.overallCpuUsage / (
esxi.summary.hardware.numCpuPkgs * esxi.summary.hardware.numCpuCores * esxi.summary.hardware.cpuMhz) * 100)
except Exception as e:
esxi_host[esxi.name]['esxi_info']['处理器使用率'] = None
print(e)
esxi_host[esxi.name]['esxi_info']['内存(MB)'] = esxi.summary.hardware.memorySize / 1024 / 1024
try:
esxi_host[esxi.name]['esxi_info']['可用内存(MB)'] = '%.1f MB' % (
(esxi.summary.hardware.memorySize / 1024 / 1024) - esxi.summary.quickStats.overallMemoryUsage)
except Exception as e:
esxi_host[esxi.name]['esxi_info']['可用内存(MB)'] = None
print(e)
try:
esxi_host[esxi.name]['esxi_info']['内存使用率'] = '%.1f%%' % ((esxi.summary.quickStats.overallMemoryUsage / (
esxi.summary.hardware.memorySize / 1024 / 1024)) * 100)
except Exception as e:
esxi_host[esxi.name]['esxi_info']['内存使用率'] = None
print(e)
esxi_host[esxi.name]['esxi_info']['系统'] = esxi.summary.config.product.fullName
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)
for nt in esxi.network:
esxi_host[esxi.name]['network'][nt.name] = {}
esxi_host[esxi.name]['network'][nt.name]['标签ID'] = nt.name
for vm in esxi.vm:
esxi_host[esxi.name]['vm'][vm.name] = {}
esxi_host[esxi.name]['vm'][vm.name]['电源状态'] = vm.runtime.powerState
esxi_host[esxi.name]['vm'][vm.name]['CPU(内核总数)'] = vm.config.hardware.numCPU
esxi_host[esxi.name]['vm'][vm.name]['内存(总数MB)'] = vm.config.hardware.memoryMB
esxi_host[esxi.name]['vm'][vm.name]['系统信息'] = vm.config.guestFullName
if vm.guest.ipAddress:
esxi_host[esxi.name]['vm'][vm.name]['IP'] = vm.guest.ipAddress
else:
esxi_host[esxi.name]['vm'][vm.name]['IP'] = '服务器需要开机后才可以获取'
for d in vm.config.hardware.device:
if isinstance(d, vim.vm.device.VirtualDisk):
esxi_host[esxi.name]['vm'][vm.name][d.deviceInfo.label] = str(
(d.capacityInKB) / 1024 / 1024) + ' GB'
print("####esxi_host", esxi_host)
return esxi_host
def get_esxi_list():
esxi_list = []
si = SmartConnectNoSSL(
host='10.23.1xx.xx',
user='rexxxl',
pwd='xxxxx',
port='443')
atexit.register(Disconnect, si)
content = si.RetrieveContent()
esxi_obj = get_obj(content, [vim.HostSystem])
# print(esxi_obj[1].name) -- 10.23.140.242
for h in esxi_obj:
print('ESXI IP:', h.name)
esxi_list.append(h.name)
return esxi_list
def get_esxi_single_info(esxi_ip):
esxi_host = {}
si = SmartConnectNoSSL(
host='10.23.1xx.xx',
user='rexxxl',
pwd='xxxxx',
port='443')
atexit.register(Disconnect, si)
content = si.RetrieveContent()
esxi_obj = get_obj(content, [vim.HostSystem])
for esxi in esxi_obj:
if esxi.name == esxi_ip:
esxi_host[esxi.name] = {'esxi_info': {}, 'datastore': {}, 'network': {}, 'vm': {}}
esxi_host[esxi.name]['esxi_info']['厂商'] = esxi.summary.hardware.vendor
esxi_host[esxi.name]['esxi_info']['型号'] = esxi.summary.hardware.model
for i in esxi.summary.hardware.otherIdentifyingInfo:
if isinstance(i, vim.host.SystemIdentificationInfo):
esxi_host[esxi.name]['esxi_info']['SN'] = i.identifierValue
esxi_host[esxi.name]['esxi_info']['处理器'] = '数量:%s 核数:%s 线程数:%s 频率:%s(%s) ' % (
esxi.summary.hardware.numCpuPkgs,
esxi.summary.hardware.numCpuCores,
esxi.summary.hardware.numCpuThreads,
esxi.summary.hardware.cpuMhz,
esxi.summary.hardware.cpuModel)
try:
esxi_host[esxi.name]['esxi_info']['处理器使用率'] = '%.1f%%' % (esxi.summary.quickStats.overallCpuUsage / (
esxi.summary.hardware.numCpuPkgs * esxi.summary.hardware.numCpuCores * esxi.summary.hardware.cpuMhz) * 100)
except Exception as e:
esxi_host[esxi.name]['esxi_info']['处理器使用率'] = None
print(e)
esxi_host[esxi.name]['esxi_info']['内存(MB)'] = esxi.summary.hardware.memorySize / 1024 / 1024
try:
esxi_host[esxi.name]['esxi_info']['可用内存(MB)'] = '%.1f MB' % (
(esxi.summary.hardware.memorySize / 1024 / 1024) - esxi.summary.quickStats.overallMemoryUsage)
except Exception as e:
esxi_host[esxi.name]['esxi_info']['可用内存(MB)'] = None
print(e)
try:
esxi_host[esxi.name]['esxi_info']['内存使用率'] = '%.1f%%' % ((esxi.summary.quickStats.overallMemoryUsage / (
esxi.summary.hardware.memorySize / 1024 / 1024)) * 100)
except Exception as e:
esxi_host[esxi.name]['esxi_info']['内存使用率'] = None
print(e)
esxi_host[esxi.name]['esxi_info']['系统'] = esxi.summary.config.product.fullName
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)
for nt in esxi.network:
esxi_host[esxi.name]['network'][nt.name] = {}
esxi_host[esxi.name]['network'][nt.name]['标签ID'] = nt.name
for vm in esxi.vm:
esxi_host[esxi.name]['vm'][vm.name] = {}
esxi_host[esxi.name]['vm'][vm.name]['电源状态'] = vm.runtime.powerState
esxi_host[esxi.name]['vm'][vm.name]['CPU(内核总数)'] = vm.config.hardware.numCPU
esxi_host[esxi.name]['vm'][vm.name]['内存(总数MB)'] = vm.config.hardware.memoryMB
esxi_host[esxi.name]['vm'][vm.name]['系统信息'] = vm.config.guestFullName
if vm.guest.ipAddress:
esxi_host[esxi.name]['vm'][vm.name]['IP'] = vm.guest.ipAddress
else:
esxi_host[esxi.name]['vm'][vm.name]['IP'] = '服务器需要开机后才可以获取'
for d in vm.config.hardware.device:
if isinstance(d, vim.vm.device.VirtualDisk):
esxi_host[esxi.name]['vm'][vm.name][d.deviceInfo.label] = str(
(d.capacityInKB) / 1024 / 1024) + ' GB'
print("####esxi_host", esxi_host)
return esxi_host
def get_esxi_datacenter():
si = SmartConnectNoSSL(
host='10.23.1xx.xx',
user='rexxxl',
pwd='xxxxx',
port='443')
atexit.register(Disconnect, si)
content = si.RetrieveContent()
esxi_obj = get_obj(content, [vim.Datacenter])
#print(esxi_obj[0].hostFolder.childEntity[0].name)
data = []
for i in esxi_obj:
esxi_list = []
datacenter_data = {'datacenter_name': i.name}
for j in i.hostFolder.childEntity:
esxi_list.append(j.name)
datacenter_data['host_list'] = esxi_list
data.append(datacenter_data)
return data