查看了VC API、SDK,并没有找到用虚拟机来查询虚拟机所在ESXi的直接用法.
所以采用遍历查找的本办法:
//根据虚拟机名称获取EXSi名称
public String getExsiName(String vmName) {
private static final String VC_IP = "127.0.0.1";
private static final String VC_USERNAME = "username";
private static final String VC_PASSWORD = "password";
URL url = new URL("https", VC_IP, "/sdk");
//连接VC
ServiceInstance si = new ServiceInstance(url, VC_USERNAME, VC_PASSWORD, true);
Folder rootFolder = si.getRootFolder();
//查找所有EXSi
ManagedEntity[] hostSystems = new InventoryNavigator(rootFolder)
.searchManagedManagedEntities("HostSystem");
for (ManagedEntity me : hostSystems) {
HostSystem hs = (HostSystem) me;
VirtualMachine[] vms = hs.getVms();
for (VirtualMachine vMa : vms) {
if (vMa.getName().equals(vmName)) {
return hs.getName;
}
}
}
return null;
}
怎么获取EXSi的IP?可以根据EXSi网卡信息,按照自己的规范来查找,比如我们是把IP配在网卡vmk0
沿用上面的代码:
HostSystem hs = (HostSystem) me;
HostVirtualNic[] nics = hs.getConfig().getNetWork().getVnic();
//我们默认网卡vmk0的IP是exsi的IP
String exsiIp = nics[0].getSpec().getIp().getIpAddress();

当无法直接通过VC API或SDK获取ESXi主机信息时,可以通过遍历检查ESXi的网络配置,尤其是关注vmk0网卡的IP地址,来识别ESXi主机的IP。此方法适用于已知IP配置规则的情况。
228

被折叠的 条评论
为什么被折叠?



