获取数据中心下有多少集群、主机、目录(只获取数据中心当层数据,不进一步对集群、目录下的数据进行深层获取)
# -*- coding: utf-8 -*-
from pyVim.connect import SmartConnectNoSSL, Disconnect
from pyVmomi import vim, vmodl
class VmManage(object):
def __init__(self, host, user, password, port, ssl):
self.config = None
self.host = host
self.user = user
self.pwd = password
self.port = port
self.sslContext = ssl
try:
self.client = SmartConnectNoSSL(host=host,
user=user,
pwd=password,
port=443
)
self.content = self.client.RetrieveContent()
self.result = True
except Exception as e:
self.result = e
def _get_all_objs(self, obj_type, folder=None):
"""
根据对象类型获取这一类型的所有对象
"""
if folder is None:
container = self.content.viewManager.CreateContainerView(self.content.rootFolder, obj_type, True)
else:
container = self.content.viewManager.CreateContainerView(folder, obj_type, True)
return container.view
def _get_obj(self, obj_type, name):
"""
根据对象类型和名称来获取具体对象
"""
obj = None
content = self.client.RetrieveContent()
container = content.viewManager.CreateContainerView(content.rootFolder, obj_type, True)
for c in container.view:
if c.name == name:
obj = c
break
return obj
if __name__ == '__main__':
ip = '192.168.1.1'
user = 'admin'
password = '1111'
port = 443
vm = VmManage(host=ip,
user=user,
password=password,
port=port, ssl=None)
datacenter_objs = vm._get_all_objs([vim.Datacenter])
data = []
for i in datacenter_objs:
datacenter_data = {'datacenter_name': i.name,
'data': {}
}
datacenter_data['data']['cluster_nums'] = 0
datacenter_data['data']['cluster_data'] = []
datacenter_data['data']['host_nums'] = 0
datacenter_data['data']['host_data'] = []
datacenter_data['data']['folder_nums'] = 0
datacenter_data['data']['folder_data'] = []
for j in i.hostFolder.childEntity:
if type(j) == vim.ClusterComputeResource:
datacenter_data['data']['cluster_nums'] += 1
datacenter_data['data']['cluster_data'].append(j.name)
elif type(j) == vim.HostSystem:
datacenter_data['data']['host_nums'] += 1
datacenter_data['data']['host_data'].append(j.name)
elif type(j) == vim.Folder:
datacenter_data['data']['folder_nums'] += 1
datacenter_data['data']['folder_data'].append(j.name)
data.append(datacenter_data)
print data
结果:
[
{
"data": {
"folder_data": [
"t1",
"222222"
],
"folder_nums": 2,
"cluster_data": [
"\u4e34\u65f6\u6d4b\u8bd5",
"\u6d4b\u8bd5\u96c6\u7fa4"
],
"cluster_nums": 2,
"host_data": [
],
"host_nums": 0
},
"datacenter_name": "\u6d4b\u8bd5\u6570\u636e\u4e2d\u5fc3"
}
]
解析后