如何使用VMware vSphere Web Service SDK6.0开发自己的功能(二)之获取指定esxi主机下的虚拟机数量

前言

上一篇文章已经讲解了如何登录到vCenter Server,这一步接下来工作的前提。登录到vCenter server之后,我们就可以做很多我们想要的功能了。这次就说一下如何获取esxi主机上虚拟机的数量,这个功能比较简单,十来行代码就可以搞定。

实现

    void getAllVirtualMachine() {
        try {
            //实例化getMOREFs,这行代码是否需要,取决于如何调用这个函数,如果是在其他类调用这个函数,则需要这行代码,否则不需要
            getMOREFs = new GetMOREF(connection);
            //获取数据中心的引用
            ManagedObjectReference dcMor = getMOREFs.inContainerByType(connection.getServiceContent().getRootFolder(),
                    "Datacenter").get("datacenterName");
            //获取数据中心下的所有主机
            Map<String, ManagedObjectReference> hosts =
                    getMOREFs.inContainerByType(dcMor, "HostSystem");
            //获取指定主机的引用
            ManagedObjectReference hostMor = hosts.get("hostName");
            //获取主机下的虚拟机数量
            Map<String, ManagedObjectReference> vms =
                        getMOREFs.inContainerByType(hostMor, "VirtualMachine");

            System.out.println(vms.size());
        } catch (InvalidPropertyFaultMsg invalidPropertyFaultMsg) {
            invalidPropertyFaultMsg.printStackTrace();
        } catch (RuntimeFaultFaultMsg runtimeFaultFaultMsg) {
            runtimeFaultFaultMsg.printStackTrace();
        }
    }

至于为什么是这样的一个流程,大家可以观察一下web client里面的清单列表,是不是这样的一个树形结构。下面这几行代码是重点

ManagedObjectReference dcMor = getMOREFs.inContainerByType(connection.getServiceContent().getRootFolder(),
                    "Datacenter").get("dataCenter");

Map<String, ManagedObjectReference> hosts =
                    getMOREFs.inContainerByType(dcMor, "HostSystem");


Map<String, ManagedObjectReference> vms =
                        getMOREFs.inContainerByType(hostMor, "VirtualMachine");

对VMware vSphere WebService SDK使用的一些总结这篇文章中,我有提到过使用mob,熟悉mob,就能很快理解为什么要这么写。

首先打开mob首页

点击content,往下翻找到

点击group-d1(这个值可能会不同)

点击后,找到hostFolder项

点击后,找到

到主机一级的结构就是这样的,再往下找就能找到VirtualMachine,这里省略。从mob的结构中,我们可以看出,HostSystem是DataCenter的一个子类型,而DataCenter又是rootFolder的一个子类型,这样就不难理解那三行代码。

运行结果

猜你喜欢

转载自blog.csdn.net/u013385554/article/details/81944797