Skip to content

[Vmware] Improve listing of Vmware Datacenter VMs for migration to KVM #10770

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: 4.19
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import javax.naming.ConfigurationException;
import javax.persistence.EntityExistsException;

import com.cloud.hypervisor.vmware.mo.VirtualMachineMO;
import com.cloud.hypervisor.vmware.util.VmwareClient;
import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
import org.apache.cloudstack.api.command.admin.zone.ImportVsphereStoragePoliciesCmd;
Expand Down Expand Up @@ -1587,14 +1588,26 @@
return compatiblePools;
}

@Override
public List<UnmanagedInstanceTO> listVMsInDatacenter(ListVmwareDcVmsCmd cmd) {
private static class VcenterData {
public final String vcenter;
public final String datacenterName;
public final String username;
public final String password;

public VcenterData(String vcenter, String datacenterName, String username, String password) {
this.vcenter = vcenter;
this.datacenterName = datacenterName;
this.username = username;
this.password = password;
}

Check warning on line 1602 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1597-L1602

Added lines #L1597 - L1602 were not covered by tests
}

private VcenterData getVcenterData(ListVmwareDcVmsCmd cmd) {

Check warning on line 1605 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1605

Added line #L1605 was not covered by tests
String vcenter = cmd.getVcenter();
String datacenterName = cmd.getDatacenterName();
String username = cmd.getUsername();
String password = cmd.getPassword();
Long existingVcenterId = cmd.getExistingVcenterId();
String keyword = cmd.getKeyword();

if ((existingVcenterId == null && StringUtils.isBlank(vcenter)) ||
(existingVcenterId != null && StringUtils.isNotBlank(vcenter))) {
Expand All @@ -1615,34 +1628,67 @@
username = vmwareDc.getUser();
password = vmwareDc.getPassword();
}
VcenterData vmwaredc = new VcenterData(vcenter, datacenterName, username, password);
return vmwaredc;
}

Check warning on line 1633 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1631-L1633

Added lines #L1631 - L1633 were not covered by tests

private static VmwareContext getVmwareContext(String vcenter, String username, String password) throws Exception {
s_logger.debug(String.format("Connecting to the VMware vCenter %s", vcenter));
String serviceUrl = String.format("https://%s/sdk/vimService", vcenter);
VmwareClient vimClient = new VmwareClient(vcenter);
vimClient.connect(serviceUrl, username, password);
return new VmwareContext(vimClient, vcenter);
}

Check warning on line 1641 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1635-L1641

Added lines #L1635 - L1641 were not covered by tests

@Override
public List<UnmanagedInstanceTO> listVMsInDatacenter(ListVmwareDcVmsCmd cmd) {
VcenterData vmwareDC = getVcenterData(cmd);
String vcenter = vmwareDC.vcenter;
String username = vmwareDC.username;
String password = vmwareDC.password;
String datacenterName = vmwareDC.datacenterName;
String keyword = cmd.getKeyword();
String esxiHostName = cmd.getHost();
String virtualMachineName = cmd.getInstanceName();

Check warning on line 1652 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1644-L1652

Added lines #L1644 - L1652 were not covered by tests

try {
s_logger.debug(String.format("Connecting to the VMware datacenter %s at vCenter %s to retrieve VMs",
datacenterName, vcenter));
String serviceUrl = String.format("https://%s/sdk/vimService", vcenter);
VmwareClient vimClient = new VmwareClient(vcenter);
vimClient.connect(serviceUrl, username, password);
VmwareContext context = new VmwareContext(vimClient, vcenter);

DatacenterMO dcMo = new DatacenterMO(context, datacenterName);
ManagedObjectReference dcMor = dcMo.getMor();
if (dcMor == null) {
String msg = String.format("Unable to find VMware datacenter %s in vCenter %s",
datacenterName, vcenter);
s_logger.error(msg);
throw new InvalidParameterValueException(msg);
VmwareContext context = getVmwareContext(vcenter, username, password);
DatacenterMO dcMo = getDatacenterMO(context, vcenter, datacenterName);

Check warning on line 1656 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1655-L1656

Added lines #L1655 - L1656 were not covered by tests

List<UnmanagedInstanceTO> instances;

Check warning on line 1658 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1658

Added line #L1658 was not covered by tests
if (StringUtils.isNotBlank(esxiHostName) && StringUtils.isNotBlank(virtualMachineName)) {
ManagedObjectReference hostMor = dcMo.findHost(esxiHostName);

Check warning on line 1660 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1660

Added line #L1660 was not covered by tests
if (hostMor == null) {
String errorMsg = String.format("Cannot find a host with name %s on vcenter %s", esxiHostName, vcenter);
s_logger.error(errorMsg);
throw new CloudRuntimeException(errorMsg);

Check warning on line 1664 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1662-L1664

Added lines #L1662 - L1664 were not covered by tests
}
HostMO hostMO = new HostMO(context, hostMor);
VirtualMachineMO vmMo = hostMO.findVmOnHyperHost(virtualMachineName);
instances = Collections.singletonList(VmwareHelper.getUnmanagedInstance(hostMO, vmMo));
} else {
instances = dcMo.getAllVmsOnDatacenter(keyword);

Check warning on line 1670 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1666-L1670

Added lines #L1666 - L1670 were not covered by tests
}
List<UnmanagedInstanceTO> instances = dcMo.getAllVmsOnDatacenter();
return StringUtils.isBlank(keyword) ? instances :
instances.stream().filter(x -> x.getName().toLowerCase().contains(keyword.toLowerCase())).collect(Collectors.toList());
return instances;

Check warning on line 1672 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1672

Added line #L1672 was not covered by tests
} catch (Exception e) {
String errorMsg = String.format("Error retrieving stopped VMs from the VMware VC %s datacenter %s: %s",
String errorMsg = String.format("Error retrieving VMs from the VMware VC %s datacenter %s: %s",

Check warning on line 1674 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1674

Added line #L1674 was not covered by tests
vcenter, datacenterName, e.getMessage());
s_logger.error(errorMsg, e);
throw new CloudRuntimeException(errorMsg);
}
}

private static DatacenterMO getDatacenterMO(VmwareContext context, String vcenter, String datacenterName) throws Exception {
DatacenterMO dcMo = new DatacenterMO(context, datacenterName);
ManagedObjectReference dcMor = dcMo.getMor();

Check warning on line 1683 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1681-L1683

Added lines #L1681 - L1683 were not covered by tests
if (dcMor == null) {
String msg = String.format("Unable to find VMware datacenter %s in vCenter %s", datacenterName, vcenter);
s_logger.error(msg);
throw new InvalidParameterValueException(msg);

Check warning on line 1687 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1685-L1687

Added lines #L1685 - L1687 were not covered by tests
}
return dcMo;
}

Check warning on line 1690 in plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java#L1689-L1690

Added lines #L1689 - L1690 were not covered by tests

@Override
public boolean hasNexusVSM(Long clusterId) {
ClusterVSMMapVO vsmMapVo = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@
@Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, description = "The password for specified username.")
private String password;

@Parameter(name = ApiConstants.HOST, type = CommandType.STRING, description = "Name of the host on vCenter. Must be set along with the instancename parameter")
private String host;

@Parameter(name = ApiConstants.INSTANCE_NAME, type = CommandType.STRING, description = "Name of the VM on vCenter. Must be set along with the host parameter")
private String instanceName;

public String getVcenter() {
return vcenter;
}
Expand All @@ -86,10 +92,18 @@
return datacenterName;
}

public String getHost() {
return host;
}

Check warning on line 97 in plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java#L95-L97

Added lines #L95 - L97 were not covered by tests

public Long getExistingVcenterId() {
return existingVcenterId;
}

public String getInstanceName() {
return instanceName;
}

Check warning on line 105 in plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java#L103-L105

Added lines #L103 - L105 were not covered by tests

@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
checkParameters();
Expand Down Expand Up @@ -125,6 +139,11 @@
throw new ServerApiException(ApiErrorCode.PARAM_ERROR,
"Please set all the information for a vCenter IP/Name, datacenter, username and password");
}
if ((StringUtils.isNotBlank(instanceName) && StringUtils.isBlank(host)) ||
(StringUtils.isBlank(instanceName) && StringUtils.isNotBlank(host))) {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR,

Check warning on line 144 in plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java

View check run for this annotation

Codecov / codecov/patch

plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java#L144

Added line #L144 was not covered by tests
"Please set the hostname parameter along with the virtualmachinename parameter");
}
}

@Override
Expand Down
28 changes: 28 additions & 0 deletions ui/src/views/tools/ManageInstances.vue
Original file line number Diff line number Diff line change
Expand Up @@ -1302,6 +1302,31 @@ export default {
this.fetchInstances()
}
},
fetchVmwareInstanceForKVMMigration (vmname, hostname) {
const params = {}
if (this.isMigrateFromVmware && this.selectedVmwareVcenter) {
if (this.selectedVmwareVcenter.vcenter) {
params.datacentername = this.selectedVmwareVcenter.datacentername
params.vcenter = this.selectedVmwareVcenter.vcenter
params.username = this.selectedVmwareVcenter.username
params.password = this.selectedVmwareVcenter.password
} else {
params.existingvcenterid = this.selectedVmwareVcenter.existingvcenterid
}
params.instancename = vmname
params.host = hostname
}
api('listVmwareDcVms', params).then(json => {
const response = json.listvmwaredcvmsresponse
this.selectedUnmanagedInstance = response.unmanagedinstance[0]
this.selectedUnmanagedInstance.ostypename = this.selectedUnmanagedInstance.osdisplayname
this.selectedUnmanagedInstance.state = this.selectedUnmanagedInstance.powerstate
}).catch(error => {
this.$notifyError(error)
}).finally(() => {
this.loading = false
})
},
onManageInstanceAction () {
this.selectedUnmanagedInstance = {}
if (this.unmanagedInstances.length > 0 &&
Expand All @@ -1319,6 +1344,9 @@ export default {
}
})
this.showUnmanageForm = false
} else if (this.isMigrateFromVmware) {
this.fetchVmwareInstanceForKVMMigration(this.selectedUnmanagedInstance.name, this.selectedUnmanagedInstance.hostname)
this.showUnmanageForm = true
} else {
this.showUnmanageForm = true
}
Expand Down
7 changes: 7 additions & 0 deletions ui/src/views/tools/SelectVmwareVcenter.vue
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ export default {
} else {
params.existingvcenterid = this.selectedExistingVcenterId
}
params.page = 1
params.pagesize = 10
api('listVmwareDcVms', params).then(json => {
const obj = {
params: params,
Expand Down Expand Up @@ -265,6 +267,11 @@ export default {
this.loading = false
})
},
onSelectExternalVmwareDatacenter (value) {
if (this.vcenterSelectedOption === 'new' && !(this.vcenter === '' || this.datacentername === '' || this.username === '' || this.password === '')) {
this.listVmwareDatacenterVms()
}
},
onSelectExistingVmwareDatacenter (value) {
this.selectedExistingVcenterId = value
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
// under the License.
package com.cloud.hypervisor.vmware.mo;

import com.cloud.utils.Pair;
import com.vmware.vim25.DynamicProperty;
import com.vmware.vim25.ObjectContent;
import com.vmware.vim25.VirtualMachinePowerState;
import org.apache.cloudstack.vm.UnmanagedInstanceTO;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import com.vmware.vim25.CustomFieldDef;
Expand All @@ -24,12 +30,21 @@

import com.cloud.hypervisor.vmware.util.VmwareContext;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BaseMO {
private static final Logger s_logger = Logger.getLogger(BaseMO.class);

protected VmwareContext _context;
protected ManagedObjectReference _mor;

protected static String[] propertyPathsForUnmanagedVmsThinListing = new String[] {"name", "config.template",
"runtime.powerState", "config.guestId", "config.guestFullName", "runtime.host"};

private String _name;

public BaseMO(VmwareContext context, ManagedObjectReference mor) {
Expand Down Expand Up @@ -153,4 +168,66 @@

return cfmMo.getCustomFieldKey(morType, fieldName);
}

private static UnmanagedInstanceTO.PowerState convertPowerState(VirtualMachinePowerState powerState) {

Check warning on line 172 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L172

Added line #L172 was not covered by tests
return powerState == VirtualMachinePowerState.POWERED_ON ? UnmanagedInstanceTO.PowerState.PowerOn :
powerState == VirtualMachinePowerState.POWERED_OFF ? UnmanagedInstanceTO.PowerState.PowerOff : UnmanagedInstanceTO.PowerState.PowerUnknown;
}

Check warning on line 175 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L175

Added line #L175 was not covered by tests

protected List<UnmanagedInstanceTO> convertVmsObjectContentsToUnmanagedInstances(List<ObjectContent> ocs, String keyword) throws Exception {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

complexity of this method is a bit high, would be nice to modularise it a bit.

Map<String, Pair<String, String>> hostClusterNamesMap = new HashMap<>();
List<UnmanagedInstanceTO> vms = new ArrayList<>();

Check warning on line 179 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L177-L179

Added lines #L177 - L179 were not covered by tests
if (ocs != null) {
for (ObjectContent oc : ocs) {
List<DynamicProperty> objProps = oc.getPropSet();
UnmanagedInstanceTO vm = new UnmanagedInstanceTO();

Check warning on line 183 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L182-L183

Added lines #L182 - L183 were not covered by tests
if (objProps != null) {
boolean isTemplate = false;
boolean excludeByKeyword = false;
String vmName;

Check warning on line 187 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L185-L187

Added lines #L185 - L187 were not covered by tests
for (DynamicProperty objProp : objProps) {
if (objProp.getName().equals("name")) {
vmName = (String) objProp.getVal();

Check warning on line 190 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L190

Added line #L190 was not covered by tests
if (StringUtils.isNotBlank(keyword) && !vmName.contains(keyword)) {
excludeByKeyword = true;

Check warning on line 192 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L192

Added line #L192 was not covered by tests
}
vm.setName(vmName);

Check warning on line 194 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L194

Added line #L194 was not covered by tests
} else if (objProp.getName().equals("config.template")) {
isTemplate = (Boolean) objProp.getVal();

Check warning on line 196 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L196

Added line #L196 was not covered by tests
} else if (objProp.getName().equals("runtime.powerState")) {
VirtualMachinePowerState powerState = (VirtualMachinePowerState) objProp.getVal();
vm.setPowerState(convertPowerState(powerState));

Check warning on line 199 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L198-L199

Added lines #L198 - L199 were not covered by tests
} else if (objProp.getName().equals("config.guestFullName")) {
vm.setOperatingSystem((String) objProp.getVal());

Check warning on line 201 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L201

Added line #L201 was not covered by tests
} else if (objProp.getName().equals("config.guestId")) {
vm.setOperatingSystemId((String) objProp.getVal());

Check warning on line 203 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L203

Added line #L203 was not covered by tests
} else if (objProp.getName().equals("runtime.host")) {
ManagedObjectReference hostMor = (ManagedObjectReference) objProp.getVal();

Check warning on line 205 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L205

Added line #L205 was not covered by tests
if (hostMor != null && StringUtils.isNotBlank(hostMor.getValue())) {
String hostMorValue = hostMor.getValue();
Pair<String, String> hostClusterPair;

Check warning on line 208 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L207-L208

Added lines #L207 - L208 were not covered by tests
if (hostClusterNamesMap.containsKey(hostMorValue)) {
hostClusterPair = hostClusterNamesMap.get(hostMorValue);

Check warning on line 210 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L210

Added line #L210 was not covered by tests
} else {
HostMO hostMO = new HostMO(_context, hostMor);
ClusterMO clusterMO = new ClusterMO(_context, hostMO.getHyperHostCluster());
hostClusterPair = new Pair<>(hostMO.getHostName(), clusterMO.getName());
hostClusterNamesMap.put(hostMorValue, hostClusterPair);

Check warning on line 215 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L212-L215

Added lines #L212 - L215 were not covered by tests
}
vm.setHostName(hostClusterPair.first());
vm.setClusterName(hostClusterPair.second());

Check warning on line 218 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L217-L218

Added lines #L217 - L218 were not covered by tests
}
}
}

Check warning on line 221 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L221

Added line #L221 was not covered by tests
if (!isTemplate && !excludeByKeyword) {
vms.add(vm);

Check warning on line 223 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L223

Added line #L223 was not covered by tests
}
}
}
}

Check warning on line 227 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L226-L227

Added lines #L226 - L227 were not covered by tests
if (vms.size() > 0) {
vms.sort(Comparator.comparing(UnmanagedInstanceTO::getName));

Check warning on line 229 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L229

Added line #L229 was not covered by tests
}
return vms;
}

Check warning on line 232 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java

View check run for this annotation

Codecov / codecov/patch

vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java#L231-L232

Added lines #L231 - L232 were not covered by tests
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import java.util.Arrays;
import java.util.List;

import com.cloud.hypervisor.vmware.util.VmwareHelper;
import org.apache.cloudstack.vm.UnmanagedInstanceTO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
Expand Down Expand Up @@ -161,28 +160,9 @@
return null;
}

public List<UnmanagedInstanceTO> getAllVmsOnDatacenter() throws Exception {
List<UnmanagedInstanceTO> vms = new ArrayList<>();
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(new String[] {"name"});
if (ocs != null) {
for (ObjectContent oc : ocs) {
ManagedObjectReference vmMor = oc.getObj();
if (vmMor != null) {
VirtualMachineMO vmMo = new VirtualMachineMO(_context, vmMor);
try {
if (!vmMo.isTemplate()) {
HostMO hostMO = vmMo.getRunningHost();
UnmanagedInstanceTO unmanagedInstance = VmwareHelper.getUnmanagedInstance(hostMO, vmMo);
vms.add(unmanagedInstance);
}
} catch (Exception e) {
s_logger.debug(String.format("Unexpected error checking unmanaged instance %s, excluding it: %s", vmMo.getVmName(), e.getMessage()), e);
}
}
}
}

return vms;
public List<UnmanagedInstanceTO> getAllVmsOnDatacenter(String keyword) throws Exception {
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(propertyPathsForUnmanagedVmsThinListing);
return convertVmsObjectContentsToUnmanagedInstances(ocs, keyword);

Check warning on line 165 in vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatacenterMO.java

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L163 - L165 were not covered by tests
}

public List<HostMO> getAllHostsOnDatacenter() throws Exception {
Expand Down
Loading