博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用VMware VSphere WebService SDK进行开发 (五)——根据虚拟机的名称获取对应主机的IP地址...
阅读量:6331 次
发布时间:2019-06-22

本文共 7530 字,大约阅读时间需要 25 分钟。

在整个获取监视信息的过程中,最难获取的就是根据虚拟机的名称获得对应主机的IP地址的功能。(个人觉得比较绕,绕了好久我才找到)

首先根据虚拟机的名称获得对应主机(HostSystem)的ManagedObjectReference对象。

RetrieveResult props = getRetrieveResultObjectWithProperty("VirtualMachine", "summary.runtime.host");		ManagedObjectReference mor = null;		if (props != null)		{			Boolean flag = false;			for (ObjectContent oc : props.getObjects())			{				if (flag == true)				{					break;				}				String path = null;				List
dps = oc.getPropSet(); if (dps != null) { for (DynamicProperty dp : dps) { path = dp.getName(); if (path.equalsIgnoreCase("name")) { String value = (String) dp.getVal(); if (value.equals(VmName)) { flag = true; } } if (path.equalsIgnoreCase("summary.runtime.host")) { mor = (ManagedObjectReference) dp.getVal(); if (flag == true) { break; } } } } } }
然后根据这个(HostSystem)的ManagedObjectReference对象获取对应的主机的名称:

private static String getObjectName(ManagedObjectReference mor) throws Exception	{		String objectName = null;				PropertySpec propSpec = new PropertySpec();		propSpec.setAll(new Boolean(false));		propSpec.getPathSet().add("name");		propSpec.setType(mor.getType());		ObjectSpec objSpec = new ObjectSpec();		objSpec.setObj(mor);		objSpec.setSkip(new Boolean(false));		PropertyFilterSpec spec = new PropertyFilterSpec();		spec.getPropSet().add(propSpec);		spec.getObjectSet().add(objSpec);				ArrayList
listpfs = new ArrayList
(); listpfs.add(spec); List
listobjcont = retrievePropertiesAllObjects(listpfs); if(listobjcont != null) { ObjectContent oc = (ObjectContent) listobjcont.get(0); objectName = (String) oc.getPropSet().get(0).getVal(); } return objectName; }
根据主机的名称分别获得对应的物理适配器的Map<"mac地址",“网卡名称”>和vSwitch的Map<"mac地址",“ip地址”>的信息,然后遍历获得具有相同mac地址的信息,那个mac地址对应的ip地址就是主机地址:

private static Map
getHostPhyIpByHostName(String hostName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg { Map
map = new HashMap
(); RetrieveResult propsHost = getRetrieveResultObjectWithProperty("HostSystem", "config.network.pnic"); List
listpnic = null; if(propsHost != null) { Boolean flagpnic = false; for (ObjectContent oc : propsHost.getObjects()) { if (flagpnic == true) { break; } String path = null; List
dps = oc.getPropSet(); if (dps != null) { for (DynamicProperty dp : dps) { path = dp.getName(); if (path.equalsIgnoreCase("config.network.pnic")) { listpnic = ((ArrayOfPhysicalNic)dp.getVal()).getPhysicalNic(); } if (path.equalsIgnoreCase("name")) { String value = (String) dp.getVal(); if (value.equals(hostName)) { flagpnic = true; break; } } } } } } if(listpnic != null) { for(PhysicalNic pnic : listpnic) { PhysicalNicSpec pns = pnic.getSpec(); String mac = pnic.getMac(); if(pns != null) { HostIpConfig hic = pns.getIp(); if(hic != null) { String ipAddress = hic.getIpAddress(); map.put(mac, ipAddress); } } } } return map; }
private static Map
getHostVirIpByHostName(String hostName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg { Map
map = new HashMap
(); RetrieveResult propsHost = getRetrieveResultObjectWithProperty("HostSystem", "config.network.vnic"); List
listpnic = null; if(propsHost != null) { Boolean flagpnic = false; for (ObjectContent oc : propsHost.getObjects()) { if (flagpnic == true) { break; } String path = null; List
dps = oc.getPropSet(); if (dps != null) { for (DynamicProperty dp : dps) { path = dp.getName(); if (path.equalsIgnoreCase("config.network.vnic")) { listpnic = ((ArrayOfHostVirtualNic)dp.getVal()).getHostVirtualNic(); } if (path.equalsIgnoreCase("name")) { String value = (String) dp.getVal(); if (value.equals(hostName)) { flagpnic = true; break; } } } } } } if(listpnic != null) { for(HostVirtualNic pnic : listpnic) { HostVirtualNicSpec pns = pnic.getSpec(); if(pns != null) { HostIpConfig hic = pns.getIp(); String mac = pns.getMac(); if(hic != null) { String ipAddress = hic.getIpAddress(); map.put(mac, ipAddress); } } } } return map; }
最后展示主要的方法(完整版):

public static String getVmHostIpByVmName(String VmName) throws Exception	{		List
ret = new ArrayList
(); RetrieveResult props = getRetrieveResultObjectWithProperty("VirtualMachine", "summary.runtime.host"); ManagedObjectReference mor = null; if (props != null) { Boolean flag = false; for (ObjectContent oc : props.getObjects()) { if (flag == true) { break; } String path = null; List
dps = oc.getPropSet(); if (dps != null) { for (DynamicProperty dp : dps) { path = dp.getName(); if (path.equalsIgnoreCase("name")) { String value = (String) dp.getVal(); if (value.equals(VmName)) { flag = true; } } if (path.equalsIgnoreCase("summary.runtime.host")) { mor = (ManagedObjectReference) dp.getVal(); if (flag == true) { break; } } } } } } String hostName = null; if (mor != null) { hostName = getObjectName(mor); } if(hostName != null) { Map
phyMap = getHostPhyIpByHostName(hostName); Map
virMap = getHostVirIpByHostName(hostName); for(Map.Entry
entry : phyMap.entrySet()) { String phyMac = entry.getKey(); for(Map.Entry
entryvir : virMap.entrySet()) { String virMac = entryvir.getKey(); if(phyMac.equalsIgnoreCase(virMac)) { ret.add(entryvir.getValue()); } } } } String ipAddress = ret.get(0); return ipAddress; }

转载地址:http://qeboa.baihongyu.com/

你可能感兴趣的文章
182在屏幕中实现网格化视图效果
查看>>
本文摘录 - FlumeJava
查看>>
Scala学习(三)----数组相关操作
查看>>
Matlab基于学习------------------函数微分学
查看>>
Dundas 系列
查看>>
Windows的命令行查看,修改,删除,添加环境变量
查看>>
iOS 图文混排
查看>>
64. Minimum Path Sum
查看>>
Windows Live Writer 使用指南
查看>>
分析iOS Crash文件,使用命令符号化iOS Crash文件
查看>>
R学习笔记 第五篇:字符串操作
查看>>
在Mac OS下配置PHP开发环境
查看>>
(转)介绍下Nuget在传统Asp.net项目中的使用
查看>>
C# ArcEngine 实现点击要素高亮并弹出其属性
查看>>
初识GO语言——安装Go语言
查看>>
SDK命令行操作
查看>>
基于Bootstrap的DropDownList的JQuery组件的完善版
查看>>
EXTJS学习系列提高篇:第二十四篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--阅增删改篇...
查看>>
Hadoop MapReduce编程 API入门系列之分区和合并(十四)
查看>>
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
查看>>