Skip to content

Commit 70fea3e

Browse files
committed
vmware: search unmanaged instances with hypervisor name
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent 43a25c7 commit 70fea3e

4 files changed

Lines changed: 48 additions & 12 deletions

File tree

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
// under the License.
1717
package com.cloud.hypervisor.vmware.resource;
1818

19+
import static com.cloud.utils.HumanReadableJson.getHumanReadableBytesJson;
20+
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
21+
1922
import java.io.File;
2023
import java.io.IOException;
2124
import java.io.UnsupportedEncodingException;
@@ -318,8 +321,8 @@
318321
import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo;
319322
import com.vmware.vim25.VirtualEthernetCardOpaqueNetworkBackingInfo;
320323
import com.vmware.vim25.VirtualIDEController;
321-
import com.vmware.vim25.VirtualMachineConfigSpec;
322324
import com.vmware.vim25.VirtualMachineBootOptions;
325+
import com.vmware.vim25.VirtualMachineConfigSpec;
323326
import com.vmware.vim25.VirtualMachineFileInfo;
324327
import com.vmware.vim25.VirtualMachineFileLayoutEx;
325328
import com.vmware.vim25.VirtualMachineFileLayoutExFileInfo;
@@ -341,9 +344,6 @@
341344
import com.vmware.vim25.VmwareDistributedVirtualSwitchPvlanSpec;
342345
import com.vmware.vim25.VmwareDistributedVirtualSwitchVlanIdSpec;
343346

344-
import static com.cloud.utils.HumanReadableJson.getHumanReadableBytesJson;
345-
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
346-
347347
public class VmwareResource implements StoragePoolResource, ServerResource, VmwareHostService, VirtualRouterDeployer {
348348
private static final Logger s_logger = Logger.getLogger(VmwareResource.class);
349349
public static final String VMDK_EXTENSION = ".vmdk";
@@ -7135,7 +7135,7 @@ private Answer execute(GetUnmanagedInstancesCommand cmd) {
71357135
VmwareHypervisorHost hyperHost = getHyperHost(context);
71367136

71377137
String vmName = cmd.getInstanceName();
7138-
List<VirtualMachineMO> vmMos = hyperHost.listVmsOnHyperHost(vmName);
7138+
List<VirtualMachineMO> vmMos = hyperHost.listVmsOnHyperHostWithHypervisorName(vmName);
71397139

71407140
for (VirtualMachineMO vmMo : vmMos) {
71417141
if (vmMo == null) {

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashMap;
2323
import java.util.List;
2424

25+
import org.apache.commons.collections.CollectionUtils;
2526
import org.apache.commons.lang.StringUtils;
2627
import org.apache.log4j.Logger;
2728

@@ -217,13 +218,13 @@ public ManagedObjectReference getHyperHostCluster() throws Exception {
217218
}
218219

219220
@Override
220-
public synchronized List<VirtualMachineMO> listVmsOnHyperHost(String vmName) throws Exception {
221+
public synchronized List<VirtualMachineMO> listVmsOnHyperHostWithHypervisorName(String vmName) throws Exception {
221222
List<VirtualMachineMO> vms = new ArrayList<>();
222223
List<ManagedObjectReference> hosts = _context.getVimClient().getDynamicProperty(_mor, "host");
223-
if (hosts != null && hosts.size() > 0) {
224+
if (CollectionUtils.isNotEmpty(hosts)) {
224225
for (ManagedObjectReference morHost : hosts) {
225226
HostMO hostMo = new HostMO(_context, morHost);
226-
vms.addAll(hostMo.listVmsOnHyperHost(vmName));
227+
vms.addAll(hostMo.listVmsOnHyperHostWithHypervisorName(vmName));
227228
}
228229
}
229230
return vms;

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

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818

1919
import java.util.ArrayList;
2020
import java.util.Arrays;
21+
import java.util.Collection;
2122
import java.util.HashMap;
2223
import java.util.List;
2324
import java.util.Map;
2425
import java.util.regex.Pattern;
2526

27+
import org.apache.commons.collections.CollectionUtils;
28+
import org.apache.commons.lang.StringUtils;
2629
import org.apache.log4j.Logger;
2730

2831
import com.google.gson.Gson;
@@ -497,10 +500,10 @@ public String getHostName() throws Exception {
497500
}
498501

499502
@Override
500-
public synchronized List<VirtualMachineMO> listVmsOnHyperHost(String vmName) throws Exception {
503+
public synchronized List<VirtualMachineMO> listVmsOnHyperHostWithHypervisorName(String vmName) throws Exception {
501504
List<VirtualMachineMO> vms = new ArrayList<>();
502-
if (vmName != null && !vmName.isEmpty()) {
503-
vms.add(findVmOnHyperHost(vmName));
505+
if (StringUtils.isNotEmpty(vmName)) {
506+
vms.add(findVmOnHyperHostWithHypervisorName(vmName));
504507
} else {
505508
loadVmCache();
506509
vms.addAll(_vmCache.values());
@@ -1209,4 +1212,36 @@ public boolean isUefiLegacySupported() throws Exception {
12091212
return false;
12101213
}
12111214

1215+
private synchronized VirtualMachineMO findVmOnHyperHostWithHypervisorName(String vmName) throws Exception {
1216+
if (s_logger.isDebugEnabled())
1217+
s_logger.debug("find VM hypervisor name: " + vmName + " on host");
1218+
1219+
VirtualMachineMO vmMo = getVmWithHypervisorName(_vmCache.values(), vmName);
1220+
if (vmMo != null) {
1221+
if (s_logger.isDebugEnabled())
1222+
s_logger.debug("VM hypervisor name: " + vmName + " found in host cache");
1223+
return vmMo;
1224+
}
1225+
1226+
s_logger.info("VM hypervisor name: " + vmName + " not found in host cache");
1227+
loadVmCache();
1228+
1229+
return getVmWithHypervisorName(_vmCache.values(), vmName);
1230+
}
1231+
1232+
private VirtualMachineMO getVmWithHypervisorName(Collection<VirtualMachineMO> vmList, String vmName) {
1233+
if (CollectionUtils.isNotEmpty(vmList)) {
1234+
for (VirtualMachineMO vm : vmList) {
1235+
try {
1236+
if (StringUtils.isNotEmpty(vm.getVmName()) && vm.getVmName().equals(vmName)) {
1237+
return vm;
1238+
}
1239+
} catch (Exception e) {
1240+
s_logger.debug("Failed to get VM name, ignoring exception", e);
1241+
}
1242+
}
1243+
}
1244+
return null;
1245+
}
1246+
12121247
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public interface VmwareHypervisorHost {
5353

5454
String getHyperHostDefaultGateway() throws Exception;
5555

56-
List<VirtualMachineMO> listVmsOnHyperHost(String name) throws Exception;
56+
List<VirtualMachineMO> listVmsOnHyperHostWithHypervisorName(String name) throws Exception;
5757

5858
VirtualMachineMO findVmOnHyperHost(String name) throws Exception;
5959

0 commit comments

Comments
 (0)