CS-9919 Support for Nexus Swiches (Cisco Vswitches)

Description:

	Moved dvSwitch specific functionality over datacenter.

Conflicts:

	vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
	vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
This commit is contained in:
Sateesh Chodapuneedi 2012-05-10 18:35:44 +05:30 committed by Vijayendra Bhamidipati
parent 04898a0bf9
commit aa1f26cb00
3 changed files with 328 additions and 323 deletions

View File

@ -10,7 +10,8 @@
// limitations under the License. // limitations under the License.
// //
// Automatically generated by addcopyright.py at 04/03/2012 // Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.hypervisor.vmware.mo;
package com.cloud.hypervisor.vmware.mo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -19,6 +20,7 @@ import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.cloud.utils.Pair; import com.cloud.utils.Pair;
import com.vmware.apputils.vim25.ServiceUtil; import com.vmware.apputils.vim25.ServiceUtil;
import com.vmware.vim25.CustomFieldStringValue; import com.vmware.vim25.CustomFieldStringValue;
import com.vmware.vim25.DVPortgroupConfigInfo;
import com.vmware.vim25.DynamicProperty; import com.vmware.vim25.DynamicProperty;
import com.vmware.vim25.ManagedObjectReference; import com.vmware.vim25.ManagedObjectReference;
import com.vmware.vim25.ObjectContent; import com.vmware.vim25.ObjectContent;
@ -27,64 +29,64 @@ import com.vmware.vim25.PropertyFilterSpec;
import com.vmware.vim25.PropertySpec; import com.vmware.vim25.PropertySpec;
import com.vmware.vim25.SelectionSpec; import com.vmware.vim25.SelectionSpec;
import com.vmware.vim25.TraversalSpec; import com.vmware.vim25.TraversalSpec;
public class DatacenterMO extends BaseMO { public class DatacenterMO extends BaseMO {
public DatacenterMO(VmwareContext context, ManagedObjectReference morDc) { public DatacenterMO(VmwareContext context, ManagedObjectReference morDc) {
super(context, morDc); super(context, morDc);
} }
public DatacenterMO(VmwareContext context, String morType, String morValue) { public DatacenterMO(VmwareContext context, String morType, String morValue) {
super(context, morType, morValue); super(context, morType, morValue);
} }
public DatacenterMO(VmwareContext context, String dcName) throws Exception { public DatacenterMO(VmwareContext context, String dcName) throws Exception {
super(context, null); super(context, null);
_mor = _context.getServiceUtil().getDecendentMoRef(_context.getRootFolder(), "Datacenter", dcName); _mor = _context.getServiceUtil().getDecendentMoRef(_context.getRootFolder(), "Datacenter", dcName);
assert(_mor != null); assert(_mor != null);
} }
public String getName() throws Exception { public String getName() throws Exception {
return (String)_context.getServiceUtil().getDynamicProperty(_mor, "name"); return (String)_context.getServiceUtil().getDynamicProperty(_mor, "name");
} }
public void registerTemplate(ManagedObjectReference morHost, String datastoreName, public void registerTemplate(ManagedObjectReference morHost, String datastoreName,
String templateName, String templateFileName) throws Exception { String templateName, String templateFileName) throws Exception {
ServiceUtil serviceUtil = _context.getServiceUtil(); ServiceUtil serviceUtil = _context.getServiceUtil();
ManagedObjectReference morFolder = (ManagedObjectReference)serviceUtil.getDynamicProperty( ManagedObjectReference morFolder = (ManagedObjectReference)serviceUtil.getDynamicProperty(
_mor, "vmFolder"); _mor, "vmFolder");
assert(morFolder != null); assert(morFolder != null);
ManagedObjectReference morTask = _context.getService().registerVM_Task( ManagedObjectReference morTask = _context.getService().registerVM_Task(
morFolder, morFolder,
String.format("[%s] %s/%s", datastoreName, templateName, templateFileName), String.format("[%s] %s/%s", datastoreName, templateName, templateFileName),
templateName, true, templateName, true,
null, morHost); null, morHost);
String result = serviceUtil.waitForTask(morTask); String result = serviceUtil.waitForTask(morTask);
if (!result.equalsIgnoreCase("Sucess")) { if (!result.equalsIgnoreCase("Sucess")) {
throw new Exception("Unable to register template due to " + TaskMO.getTaskFailureInfo(_context, morTask)); throw new Exception("Unable to register template due to " + TaskMO.getTaskFailureInfo(_context, morTask));
} else { } else {
_context.waitForTaskProgressDone(morTask); _context.waitForTaskProgressDone(morTask);
} }
} }
public VirtualMachineMO findVm(String vmName) throws Exception { public VirtualMachineMO findVm(String vmName) throws Exception {
ObjectContent[] ocs = getVmPropertiesOnDatacenterVmFolder(new String[] { "name" }); ObjectContent[] ocs = getVmPropertiesOnDatacenterVmFolder(new String[] { "name" });
if(ocs != null && ocs.length > 0) { if(ocs != null && ocs.length > 0) {
for(ObjectContent oc : ocs) { for(ObjectContent oc : ocs) {
DynamicProperty[] props = oc.getPropSet(); DynamicProperty[] props = oc.getPropSet();
if(props != null) { if(props != null) {
for(DynamicProperty prop : props) { for(DynamicProperty prop : props) {
if(prop.getVal().toString().equals(vmName)) if(prop.getVal().toString().equals(vmName))
return new VirtualMachineMO(_context, oc.getObj()); return new VirtualMachineMO(_context, oc.getObj());
} }
} }
} }
} }
return null; return null;
} }
@ -122,182 +124,274 @@ public class DatacenterMO extends BaseMO {
} }
return list; return list;
} }
public List<Pair<ManagedObjectReference, String>> getAllVmsOnDatacenter() throws Exception { public List<Pair<ManagedObjectReference, String>> getAllVmsOnDatacenter() throws Exception {
List<Pair<ManagedObjectReference, String>> vms = new ArrayList<Pair<ManagedObjectReference, String>>(); List<Pair<ManagedObjectReference, String>> vms = new ArrayList<Pair<ManagedObjectReference, String>>();
ObjectContent[] ocs = getVmPropertiesOnDatacenterVmFolder(new String[] { "name" }); ObjectContent[] ocs = getVmPropertiesOnDatacenterVmFolder(new String[] { "name" });
if(ocs != null) { if(ocs != null) {
for(ObjectContent oc : ocs) { for(ObjectContent oc : ocs) {
String vmName = oc.getPropSet(0).getVal().toString(); String vmName = oc.getPropSet(0).getVal().toString();
vms.add(new Pair<ManagedObjectReference, String>(oc.getObj(), vmName)); vms.add(new Pair<ManagedObjectReference, String>(oc.getObj(), vmName));
} }
} }
return vms; return vms;
} }
public ManagedObjectReference findDatastore(String name) throws Exception { public ManagedObjectReference findDatastore(String name) throws Exception {
assert(name != null); assert(name != null);
ObjectContent[] ocs = getDatastorePropertiesOnDatacenter(new String[] { "name" }); ObjectContent[] ocs = getDatastorePropertiesOnDatacenter(new String[] { "name" });
if(ocs != null) { if(ocs != null) {
for(ObjectContent oc : ocs) { for(ObjectContent oc : ocs) {
if(oc.getPropSet(0).getVal().toString().equals(name)) { if(oc.getPropSet(0).getVal().toString().equals(name)) {
return oc.getObj(); return oc.getObj();
} }
} }
} }
return null; return null;
}
public ManagedObjectReference findHost(String name) throws Exception {
ObjectContent[] ocs= getHostPropertiesOnDatacenterHostFolder(new String[] { "name" });
if(ocs != null) {
for(ObjectContent oc : ocs) {
if(oc.getPropSet(0).getVal().toString().equals(name)) {
return oc.getObj();
}
}
}
return null;
}
public ManagedObjectReference getVmFolder() throws Exception {
return (ManagedObjectReference)_context.getServiceUtil().getDynamicProperty(_mor, "vmFolder");
}
public ObjectContent[] getHostPropertiesOnDatacenterHostFolder(String[] propertyPaths) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("HostSystem");
pSpec.setPathSet(propertyPaths);
TraversalSpec computeResource2HostTraversal = new TraversalSpec();
computeResource2HostTraversal.setType("ComputeResource");
computeResource2HostTraversal.setPath("host");
computeResource2HostTraversal.setName("computeResource2HostTraversal");
SelectionSpec recurseFolders = new SelectionSpec();
recurseFolders.setName("folder2childEntity");
TraversalSpec folder2childEntity = new TraversalSpec();
folder2childEntity.setType("Folder");
folder2childEntity.setPath("childEntity");
folder2childEntity.setName(recurseFolders.getName());
folder2childEntity.setSelectSet(new SelectionSpec[] { recurseFolders, computeResource2HostTraversal });
TraversalSpec dc2HostFolderTraversal = new TraversalSpec();
dc2HostFolderTraversal.setType("Datacenter");
dc2HostFolderTraversal.setPath("hostFolder");
dc2HostFolderTraversal.setName("dc2HostFolderTraversal");
dc2HostFolderTraversal.setSelectSet(new SelectionSpec[] { folder2childEntity } );
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { dc2HostFolderTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
return _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
}
public ObjectContent[] getDatastorePropertiesOnDatacenter(String[] propertyPaths) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Datastore");
pSpec.setPathSet(propertyPaths);
TraversalSpec dc2DatastoreTraversal = new TraversalSpec();
dc2DatastoreTraversal.setType("Datacenter");
dc2DatastoreTraversal.setPath("datastore");
dc2DatastoreTraversal.setName("dc2DatastoreTraversal");
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { dc2DatastoreTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
return _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
}
public ObjectContent[] getVmPropertiesOnDatacenterVmFolder(String[] propertyPaths) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
pSpec.setPathSet(propertyPaths);
TraversalSpec dc2VmFolderTraversal = new TraversalSpec();
dc2VmFolderTraversal.setType("Datacenter");
dc2VmFolderTraversal.setPath("vmFolder");
dc2VmFolderTraversal.setName("dc2VmFolderTraversal");
SelectionSpec recurseFolders = new SelectionSpec();
recurseFolders.setName("folder2childEntity");
TraversalSpec folder2childEntity = new TraversalSpec();
folder2childEntity.setType("Folder");
folder2childEntity.setPath("childEntity");
folder2childEntity.setName(recurseFolders.getName());
folder2childEntity.setSelectSet(new SelectionSpec[] { recurseFolders });
dc2VmFolderTraversal.setSelectSet(new SelectionSpec[] { folder2childEntity } );
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { dc2VmFolderTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
return _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
}
public static Pair<DatacenterMO, String> getOwnerDatacenter(VmwareContext context,
ManagedObjectReference morEntity) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Datacenter");
pSpec.setPathSet(new String[] { "name" });
TraversalSpec entityParentTraversal = new TraversalSpec();
entityParentTraversal.setType("ManagedEntity");
entityParentTraversal.setPath("parent");
entityParentTraversal.setName("entityParentTraversal");
entityParentTraversal.setSelectSet(new SelectionSpec[] { new SelectionSpec(null, null, "entityParentTraversal") });
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(morEntity);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { entityParentTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
ObjectContent[] ocs = context.getService().retrieveProperties(
context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
assert(ocs != null);
assert(ocs[0].getObj() != null);
assert(ocs[0].getPropSet(0) != null);
assert(ocs[0].getPropSet(0).getVal() != null);
String dcName = ocs[0].getPropSet(0).getVal().toString();
return new Pair<DatacenterMO, String>(new DatacenterMO(context, ocs[0].getObj()), dcName);
} }
public ManagedObjectReference findHost(String name) throws Exception {
ObjectContent[] ocs= getHostPropertiesOnDatacenterHostFolder(new String[] { "name" }); public ManagedObjectReference getDvPortGroupMor(String dvPortGroupName) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("DistributedVirtualPortgroup");
pSpec.setPathSet(new String[] {"name"});
if(ocs != null) { TraversalSpec datacenter2DvPortGroupTraversal = new TraversalSpec();
for(ObjectContent oc : ocs) { datacenter2DvPortGroupTraversal.setType("Datacenter");
if(oc.getPropSet(0).getVal().toString().equals(name)) { datacenter2DvPortGroupTraversal.setPath("network");
return oc.getObj(); datacenter2DvPortGroupTraversal.setName("datacenter2DvPortgroupTraversal");
}
}
}
return null;
}
public ManagedObjectReference getVmFolder() throws Exception {
return (ManagedObjectReference)_context.getServiceUtil().getDynamicProperty(_mor, "vmFolder");
}
public ObjectContent[] getHostPropertiesOnDatacenterHostFolder(String[] propertyPaths) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("HostSystem");
pSpec.setPathSet(propertyPaths);
TraversalSpec computeResource2HostTraversal = new TraversalSpec(); ObjectSpec oSpec = new ObjectSpec();
computeResource2HostTraversal.setType("ComputeResource");
computeResource2HostTraversal.setPath("host");
computeResource2HostTraversal.setName("computeResource2HostTraversal");
SelectionSpec recurseFolders = new SelectionSpec();
recurseFolders.setName("folder2childEntity");
TraversalSpec folder2childEntity = new TraversalSpec();
folder2childEntity.setType("Folder");
folder2childEntity.setPath("childEntity");
folder2childEntity.setName(recurseFolders.getName());
folder2childEntity.setSelectSet(new SelectionSpec[] { recurseFolders, computeResource2HostTraversal });
TraversalSpec dc2HostFolderTraversal = new TraversalSpec();
dc2HostFolderTraversal.setType("Datacenter");
dc2HostFolderTraversal.setPath("hostFolder");
dc2HostFolderTraversal.setName("dc2HostFolderTraversal");
dc2HostFolderTraversal.setSelectSet(new SelectionSpec[] { folder2childEntity } );
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor); oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE); oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { dc2HostFolderTraversal }); oSpec.setSelectSet(new SelectionSpec[] { datacenter2DvPortGroupTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec(); PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec }); pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec }); pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
return _context.getService().retrieveProperties( ObjectContent[] ocs = _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(), _context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
}
public ObjectContent[] getDatastorePropertiesOnDatacenter(String[] propertyPaths) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Datastore");
pSpec.setPathSet(propertyPaths);
TraversalSpec dc2DatastoreTraversal = new TraversalSpec();
dc2DatastoreTraversal.setType("Datacenter");
dc2DatastoreTraversal.setPath("datastore");
dc2DatastoreTraversal.setName("dc2DatastoreTraversal");
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { dc2DatastoreTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
return _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
}
public ObjectContent[] getVmPropertiesOnDatacenterVmFolder(String[] propertyPaths) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
pSpec.setPathSet(propertyPaths);
TraversalSpec dc2VmFolderTraversal = new TraversalSpec();
dc2VmFolderTraversal.setType("Datacenter");
dc2VmFolderTraversal.setPath("vmFolder");
dc2VmFolderTraversal.setName("dc2VmFolderTraversal");
SelectionSpec recurseFolders = new SelectionSpec();
recurseFolders.setName("folder2childEntity");
TraversalSpec folder2childEntity = new TraversalSpec();
folder2childEntity.setType("Folder");
folder2childEntity.setPath("childEntity");
folder2childEntity.setName(recurseFolders.getName());
folder2childEntity.setSelectSet(new SelectionSpec[] { recurseFolders });
dc2VmFolderTraversal.setSelectSet(new SelectionSpec[] { folder2childEntity } );
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { dc2VmFolderTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
return _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
}
public static Pair<DatacenterMO, String> getOwnerDatacenter(VmwareContext context,
ManagedObjectReference morEntity) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Datacenter");
pSpec.setPathSet(new String[] { "name" });
TraversalSpec entityParentTraversal = new TraversalSpec();
entityParentTraversal.setType("ManagedEntity");
entityParentTraversal.setPath("parent");
entityParentTraversal.setName("entityParentTraversal");
entityParentTraversal.setSelectSet(new SelectionSpec[] { new SelectionSpec(null, null, "entityParentTraversal") });
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(morEntity);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { entityParentTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
ObjectContent[] ocs = context.getService().retrieveProperties(
context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec }); new PropertyFilterSpec[] { pfSpec });
assert(ocs != null); if(ocs != null) {
assert(ocs[0].getObj() != null); for(ObjectContent oc : ocs) {
assert(ocs[0].getPropSet(0) != null); DynamicProperty[] props = oc.getPropSet();
assert(ocs[0].getPropSet(0).getVal() != null); if(props != null) {
for(DynamicProperty prop : props) {
String dcName = ocs[0].getPropSet(0).getVal().toString(); if(prop.getVal().equals(dvPortGroupName))
return new Pair<DatacenterMO, String>(new DatacenterMO(context, ocs[0].getObj()), dcName); return oc.getObj();
}
}
}
}
return null;
}
public boolean hasDvPortGroup(String dvPortGroupName) throws Exception {
ManagedObjectReference morNetwork = getDvPortGroupMor(dvPortGroupName);
if(morNetwork != null)
return true;
return false;
} }
public DVPortgroupConfigInfo getDvPortGroupSpec(String dvPortGroupName) throws Exception {
DVPortgroupConfigInfo configSpec = null;
String nameProperty = null;
PropertySpec pSpec = new PropertySpec();
pSpec.setType("DistributedVirtualPortgroup");
pSpec.setPathSet(new String[] {"name", "config"});
TraversalSpec datacenter2DvPortGroupTraversal = new TraversalSpec();
datacenter2DvPortGroupTraversal.setType("Datacenter");
datacenter2DvPortGroupTraversal.setPath("network");
datacenter2DvPortGroupTraversal.setName("datacenter2DvPortgroupTraversal");
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { datacenter2DvPortGroupTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
ObjectContent[] ocs = _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
if(ocs != null) {
for(ObjectContent oc : ocs) {
DynamicProperty[] props = oc.getPropSet();
if(props != null) {
assert(props.length == 2);
for(DynamicProperty prop : props) {
if(prop.getName().equals("config")) {
configSpec = (DVPortgroupConfigInfo) prop.getVal();
}
else {
nameProperty = prop.getVal().toString();
}
}
if(nameProperty.equalsIgnoreCase(dvPortGroupName)) {
return configSpec;
}
}
}
}
return null;
}
} }

View File

@ -27,9 +27,7 @@ import com.vmware.apputils.vim25.ServiceUtil;
import com.vmware.vim25.AboutInfo; import com.vmware.vim25.AboutInfo;
import com.vmware.vim25.ClusterDasConfigInfo; import com.vmware.vim25.ClusterDasConfigInfo;
import com.vmware.vim25.ComputeResourceSummary; import com.vmware.vim25.ComputeResourceSummary;
import com.vmware.vim25.DVPortgroupConfigSpec;
import com.vmware.vim25.DatastoreSummary; import com.vmware.vim25.DatastoreSummary;
import com.vmware.vim25.DistributedVirtualSwitchInfo;
import com.vmware.vim25.DynamicProperty; import com.vmware.vim25.DynamicProperty;
import com.vmware.vim25.HostConfigManager; import com.vmware.vim25.HostConfigManager;
import com.vmware.vim25.HostConnectInfo; import com.vmware.vim25.HostConnectInfo;
@ -895,95 +893,4 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
HostRuntimeInfo runtimeInfo = (HostRuntimeInfo)_context.getServiceUtil().getDynamicProperty(_mor, "runtime"); HostRuntimeInfo runtimeInfo = (HostRuntimeInfo)_context.getServiceUtil().getDynamicProperty(_mor, "runtime");
return runtimeInfo.getConnectionState() == HostSystemConnectionState.connected; return runtimeInfo.getConnectionState() == HostSystemConnectionState.connected;
} }
public DVPortgroupConfigSpec getDvPortGroupSpec(String dvPortGroupName) throws Exception {
DVPortgroupConfigSpec configSpec = null;
String nameProperty = null;
PropertySpec pSpec = new PropertySpec();
pSpec.setType("DistributedVirtualPortgroup");
pSpec.setPathSet(new String[] {"summary.name", "config"});
TraversalSpec host2DvPortGroupTraversal = new TraversalSpec();
host2DvPortGroupTraversal.setType("HostSystem");
host2DvPortGroupTraversal.setPath("network");
host2DvPortGroupTraversal.setName("host2DvPortgroupTraversal");
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { host2DvPortGroupTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
ObjectContent[] ocs = _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
if(ocs != null) {
for(ObjectContent oc : ocs) {
DynamicProperty[] props = oc.getPropSet();
if(props != null) {
assert(props.length == 2);
for(DynamicProperty prop : props) {
if(prop.getName().equals("config")) {
configSpec = (DVPortgroupConfigSpec) prop.getVal();
}
else {
nameProperty = prop.getVal().toString();
}
if(nameProperty.equalsIgnoreCase(dvPortGroupName)) {
return configSpec;
}
}
}
}
}
return null;
}
public ManagedObjectReference getDvPortGroupMor(String dvPortGroupName) throws Exception {
PropertySpec pSpec = new PropertySpec();
pSpec.setType("DistributedVirtualPortgroup");
pSpec.setPathSet(new String[] {"summary.name"});
TraversalSpec host2DvPortGroupTraversal = new TraversalSpec();
host2DvPortGroupTraversal.setType("HostSystem");
host2DvPortGroupTraversal.setPath("network");
host2DvPortGroupTraversal.setName("host2DvPortgroupTraversal");
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(_mor);
oSpec.setSkip(Boolean.TRUE);
oSpec.setSelectSet(new SelectionSpec[] { host2DvPortGroupTraversal });
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
pfSpec.setPropSet(new PropertySpec[] { pSpec });
pfSpec.setObjectSet(new ObjectSpec[] { oSpec });
ObjectContent[] ocs = _context.getService().retrieveProperties(
_context.getServiceContent().getPropertyCollector(),
new PropertyFilterSpec[] { pfSpec });
if(ocs != null) {
for(ObjectContent oc : ocs) {
DynamicProperty[] props = oc.getPropSet();
if(props != null) {
for(DynamicProperty prop : props) {
if(prop.getVal().equals(dvPortGroupName))
return oc.getObj();
}
}
}
}
return null;
}
public boolean hasDvPortGroup(String dvPortGroupName) throws Exception {
ManagedObjectReference morNetwork = getDvPortGroupMor(dvPortGroupName);
if(morNetwork != null)
return true;
return false;
}
} }

View File

@ -38,6 +38,7 @@ import com.vmware.vim25.BoolPolicy;
import com.vmware.vim25.DVPortgroupConfigSpec; import com.vmware.vim25.DVPortgroupConfigSpec;
import com.vmware.vim25.DVSTrafficShapingPolicy; import com.vmware.vim25.DVSTrafficShapingPolicy;
//import com.vmware.vim25.DistributedVirtualSwitchKeyedOpaqueBlob; //import com.vmware.vim25.DistributedVirtualSwitchKeyedOpaqueBlob;
import com.vmware.vim25.DVPortgroupConfigInfo;
import com.vmware.vim25.DynamicProperty; import com.vmware.vim25.DynamicProperty;
import com.vmware.vim25.HostNetworkTrafficShapingPolicy; import com.vmware.vim25.HostNetworkTrafficShapingPolicy;
import com.vmware.vim25.HostPortGroupSpec; import com.vmware.vim25.HostPortGroupSpec;
@ -220,8 +221,10 @@ public class HypervisorHostHelper {
long timeOutMs) throws Exception, CloudRuntimeException { long timeOutMs) throws Exception, CloudRuntimeException {
ManagedObjectReference morNetwork = null; ManagedObjectReference morNetwork = null;
VmwareContext context = hostMo.getContext(); VmwareContext context = hostMo.getContext();
ManagedObjectReference dcMor = hostMo.getHyperHostDatacenter();
DatacenterMO dataCenterMo = new DatacenterMO(context, dcMor);
ManagedObjectReference morEthernetPortProfile = hostMo.getDvPortGroupMor(ethPortProfileName); ManagedObjectReference morEthernetPortProfile = dataCenterMo.getDvPortGroupMor(ethPortProfileName);
if (morEthernetPortProfile == null) { if (morEthernetPortProfile == null) {
String msg = "Unable to find Ethernet port profile " + ethPortProfileName; String msg = "Unable to find Ethernet port profile " + ethPortProfileName;
@ -261,12 +264,13 @@ public class HypervisorHostHelper {
shapingPolicy.setPeakBandwidth(peakBandwidth); shapingPolicy.setPeakBandwidth(peakBandwidth);
shapingPolicy.setBurstSize(burstSize); shapingPolicy.setBurstSize(burstSize);
} }
boolean bWaitPortGroupReady = false; boolean bWaitPortGroupReady = false;
if (!hostMo.hasDvPortGroup(networkName)) { if (!dataCenterMo.hasDvPortGroup(networkName)) {
createPortProfile(context, ethPortProfileName, networkName, vid, networkRateMbps); createPortProfile(context, ethPortProfileName, networkName, vid, networkRateMbps);
bWaitPortGroupReady = true; bWaitPortGroupReady = true;
} else { } else {
DVPortgroupConfigSpec spec = hostMo.getDvPortGroupSpec(networkName); DVPortgroupConfigInfo spec = dataCenterMo.getDvPortGroupSpec(networkName);
if(!isSpecMatch(spec, vid, shapingPolicy)) { if(!isSpecMatch(spec, vid, shapingPolicy)) {
updatePortProfile(context, ethPortProfileName, vid, networkRateMbps); updatePortProfile(context, ethPortProfileName, vid, networkRateMbps);
bWaitPortGroupReady = true; bWaitPortGroupReady = true;
@ -274,9 +278,9 @@ public class HypervisorHostHelper {
} }
//Wait for dvPortGroup on vCenter //Wait for dvPortGroup on vCenter
if(bWaitPortGroupReady) if(bWaitPortGroupReady)
morNetwork = waitForDvPortGroupReady(hostMo, networkName, timeOutMs); morNetwork = waitForDvPortGroupReady(dataCenterMo, networkName, timeOutMs);
else else
morNetwork = hostMo.getDvPortGroupMor(networkName); morNetwork = dataCenterMo.getDvPortGroupMor(networkName);
if (morNetwork == null) { if (morNetwork == null) {
String msg = "Failed to create guest network " + networkName; String msg = "Failed to create guest network " + networkName;
s_logger.error(msg); s_logger.error(msg);
@ -292,14 +296,14 @@ public class HypervisorHostHelper {
} }
private static ManagedObjectReference waitForDvPortGroupReady( private static ManagedObjectReference waitForDvPortGroupReady(
HostMO hostMo, String dvPortGroupName, long timeOutMs) throws Exception { DatacenterMO dataCenterMo, String dvPortGroupName, long timeOutMs) throws Exception {
ManagedObjectReference morDvPortGroup = null; ManagedObjectReference morDvPortGroup = null;
// if DvPortGroup is just created, we may fail to retrieve it, we // if DvPortGroup is just created, we may fail to retrieve it, we
// need to retry // need to retry
long startTick = System.currentTimeMillis(); long startTick = System.currentTimeMillis();
while (System.currentTimeMillis() - startTick <= timeOutMs) { while (System.currentTimeMillis() - startTick <= timeOutMs) {
morDvPortGroup = hostMo.getDvPortGroupMor(dvPortGroupName); morDvPortGroup = dataCenterMo.getDvPortGroupMor(dvPortGroupName);
if (morDvPortGroup != null) { if (morDvPortGroup != null) {
break; break;
} }
@ -310,7 +314,7 @@ public class HypervisorHostHelper {
return morDvPortGroup; return morDvPortGroup;
} }
private static boolean isSpecMatch(DVPortgroupConfigSpec spec, Integer vid, private static boolean isSpecMatch(DVPortgroupConfigInfo spec, Integer vid,
DVSTrafficShapingPolicy shapingPolicy) { DVSTrafficShapingPolicy shapingPolicy) {
DVSTrafficShapingPolicy currentTrafficShapingPolicy; DVSTrafficShapingPolicy currentTrafficShapingPolicy;
currentTrafficShapingPolicy = spec.getDefaultPortConfig().getInShapingPolicy(); currentTrafficShapingPolicy = spec.getDefaultPortConfig().getInShapingPolicy();