python pyvmomi操作VMware(三):获取数据中心下有多少集群、主机、目录(只获取数据中心当层数据)

获取数据中心下有多少集群、主机、目录(只获取数据中心当层数据,不进一步对集群、目录下的数据进行深层获取)

# -*- 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"
    }
]

解析后
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42631707/article/details/100704722