前言
上一篇文章已经讲解了如何登录到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的一个子类型,这样就不难理解那三行代码。