Skip to content

Commit bb1d988

Browse files
committed
conditional findVms2 call
1 parent ee94ae5 commit bb1d988

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7209,7 +7209,7 @@ private Answer execute(PrepareUnmanageVMInstanceCommand cmd) {
72097209

72107210
ManagedObjectReference dcMor = hyperHost.getHyperHostDatacenter();
72117211
DatacenterMO dataCenterMo = new DatacenterMO(getServiceContext(), dcMor);
7212-
VirtualMachineMO vm = dataCenterMo.findVm(instanceName);
7212+
VirtualMachineMO vm = dataCenterMo.findVm2(instanceName);
72137213
if (vm == null) {
72147214
return new PrepareUnmanageVMInstanceAnswer(cmd, false, String.format("Cannot find VM with name [%s] in datacenter [%s].", instanceName, dataCenterMo.getName()));
72157215
}
@@ -7515,7 +7515,7 @@ public String acquireVirtualMachineVncTicket(String vmInternalCSName) throws Exc
75157515
VmwareContext context = getServiceContext();
75167516
VmwareHypervisorHost hyperHost = getHyperHost(context);
75177517
DatacenterMO dcMo = new DatacenterMO(hyperHost.getContext(), hyperHost.getHyperHostDatacenter());
7518-
VirtualMachineMO vmMo = dcMo.findVm(vmInternalCSName);
7518+
VirtualMachineMO vmMo = dcMo.findVm2(vmInternalCSName);
75197519
return vmMo.acquireVncTicket();
75207520
}
75217521

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatacenterMO.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,49 @@ public VirtualMachineMO findVm(String vmName) throws Exception {
8282
List<ObjectContent> ocs = getVmProperties(new String[] {"name", instanceNameCustomField});
8383
return HypervisorHostHelper.findVmFromObjectContent(_context, ocs.toArray(new ObjectContent[0]), vmName, instanceNameCustomField);
8484
}
85+
public VirtualMachineMO findVm2(String vmName) throws Exception {
86+
int key = getCustomFieldKey("VirtualMachine", CustomFieldConstants.CLOUD_VM_INTERNAL_NAME);
87+
if (key == 0) {
88+
logger.warn("Custom field " + CustomFieldConstants.CLOUD_VM_INTERNAL_NAME + " is not registered ?!");
89+
}
90+
String instanceNameCustomField = "value[" + key + "]";
91+
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(new String[] {"name", instanceNameCustomField});
92+
return HypervisorHostHelper.findVmFromObjectContent(_context, ocs.toArray(new ObjectContent[0]), vmName, instanceNameCustomField);
93+
}
94+
95+
public List<ObjectContent> getVmPropertiesOnDatacenterVmFolder(String[] propertyPaths) throws Exception {
96+
PropertySpec pSpec = new PropertySpec();
97+
pSpec.setType("VirtualMachine");
98+
pSpec.getPathSet().addAll(Arrays.asList(propertyPaths));
99+
100+
TraversalSpec dc2VmFolderTraversal = new TraversalSpec();
101+
dc2VmFolderTraversal.setType("Datacenter");
102+
dc2VmFolderTraversal.setPath("vmFolder");
103+
dc2VmFolderTraversal.setName("dc2VmFolderTraversal");
104+
105+
SelectionSpec recurseFolders = new SelectionSpec();
106+
recurseFolders.setName("folder2childEntity");
107+
108+
TraversalSpec folder2childEntity = new TraversalSpec();
109+
folder2childEntity.setType("Folder");
110+
folder2childEntity.setPath("childEntity");
111+
folder2childEntity.setName(recurseFolders.getName());
112+
folder2childEntity.getSelectSet().add(recurseFolders);
113+
dc2VmFolderTraversal.getSelectSet().add(folder2childEntity);
114+
115+
ObjectSpec oSpec = new ObjectSpec();
116+
oSpec.setObj(_mor);
117+
oSpec.setSkip(Boolean.TRUE);
118+
oSpec.getSelectSet().add(dc2VmFolderTraversal);
119+
120+
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
121+
pfSpec.getPropSet().add(pSpec);
122+
pfSpec.getObjectSet().add(oSpec);
123+
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
124+
pfSpecArr.add(pfSpec);
125+
126+
return _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
127+
}
85128

86129
public List<VirtualMachineMO> findVmByNameAndLabel(String vmLabel) throws Exception {
87130
CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(_context, _context.getServiceContent().getCustomFieldsManager());

0 commit comments

Comments
 (0)