Skip to content

Commit 16eab4d

Browse files
committed
Fixes and improvements
1 parent 8cac953 commit 16eab4d

File tree

4 files changed

+45
-13
lines changed

4 files changed

+45
-13
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,7 @@ public List<Class<?>> getCommands() {
11171117
cmdList.add(ListVsphereStoragePoliciesCmd.class);
11181118
cmdList.add(ListVsphereStoragePolicyCompatiblePoolsCmd.class);
11191119
cmdList.add(ListVmwareDcVmsCmd.class);
1120+
cmdList.add(ListVmwareDcHostsCmd.class);
11201121
return cmdList;
11211122
}
11221123

@@ -1634,7 +1635,7 @@ private VcenterData getVcenterData(ListVmwareDcItems cmd) {
16341635
return vmwaredc;
16351636
}
16361637

1637-
private VmwareContext getVmwareContext(String vcenter, String username, String password) throws Exception {
1638+
private static VmwareContext getVmwareContext(String vcenter, String username, String password) throws Exception {
16381639
s_logger.debug(String.format("Connecting to the VMware vCenter %s", vcenter));
16391640
String serviceUrl = String.format("https://%s/sdk/vimService", vcenter);
16401641
VmwareClient vimClient = new VmwareClient(vcenter);
@@ -1659,8 +1660,14 @@ public List<UnmanagedInstanceTO> listVMsInDatacenter(ListVmwareDcVmsCmd cmd) {
16591660
List<VirtualMachineMO> vms;
16601661
if (StringUtils.isNotBlank(esxiHostName)) {
16611662
// List VMs in a specific ESXi Host
1662-
HostMO hostMO = VmwareHelper.getHostMOFromHostName(context, esxiHostName);
1663-
vms = hostMO.listVmsOnHyperHostWithHypervisorName(null);
1663+
ManagedObjectReference hostMor = dcMo.findHost(esxiHostName);
1664+
if (hostMor == null) {
1665+
String errorMsg = String.format("Cannot find a host with name %s on vcenter %s", esxiHostName, vcenter);
1666+
s_logger.error(errorMsg);
1667+
throw new CloudRuntimeException(errorMsg);
1668+
}
1669+
HostMO hostMO = new HostMO(context, hostMor);
1670+
vms = hostMO.listAllVmsInHost();
16641671
} else {
16651672
// Long lasting method, not recommended - retrieves all the VMs in a datacenter
16661673
vms = dcMo.getAllVmsOnDatacenter();

ui/src/views/tools/ManageInstances.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ export default {
11841184
} else {
11851185
params.existingvcenterid = this.selectedVmwareVcenter.existingvcenterid
11861186
}
1187-
params.host = this.selectedVmwareVcenter.host
1187+
params.hostname = this.selectedVmwareVcenter.host
11881188
}
11891189
11901190
api(apiName, params).then(json => {

ui/src/views/tools/SelectVmwareVcenter.vue

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@
8989
<a-input
9090
v-model:value="vcenter"
9191
:placeholder="apiParams.vcenter.description"
92-
@change="onSelectExternalVmwareDatacenter"
9392
@blur="onSelectExternalVmwareDatacenter"
9493
@pressEnter="onSelectExternalVmwareDatacenter"
9594
/>
@@ -101,7 +100,6 @@
101100
<a-input
102101
v-model:value="datacenter"
103102
:placeholder="apiParams.datacentername.description"
104-
@change="onSelectExternalVmwareDatacenter"
105103
@blur="onSelectExternalVmwareDatacenter"
106104
@pressEnter="onSelectExternalVmwareDatacenter"
107105
/>
@@ -113,7 +111,6 @@
113111
<a-input
114112
v-model:value="username"
115113
:placeholder="apiParams.username.description"
116-
@change="onSelectExternalVmwareDatacenter"
117114
@blur="onSelectExternalVmwareDatacenter"
118115
@pressEnter="onSelectExternalVmwareDatacenter"
119116
/>
@@ -125,7 +122,6 @@
125122
<a-input-password
126123
v-model:value="password"
127124
:placeholder="apiParams.password.description"
128-
@change="onSelectExternalVmwareDatacenter"
129125
@blur="onSelectExternalVmwareDatacenter"
130126
@pressEnter="onSelectExternalVmwareDatacenter"
131127
/>
@@ -157,8 +153,8 @@
157153
<div class="card-footer">
158154
<a-button
159155
v-if="vcenterSelectedOption == 'existing' || vcenterSelectedOption == 'new'"
160-
:disabled="(vcenterSelectedOption === 'new' && (vcenter === '' || datacentername === '' || username === '' || password === '')) ||
161-
(vcenterSelectedOption === 'existing' && selectedExistingVcenterId === '') && host === ''"
156+
:disabled="(vcenterSelectedOption === 'new' && (vcenter === '' || datacentername === '' || username === '' || password === '' || selectedHost === '')) ||
157+
(vcenterSelectedOption === 'existing' && selectedExistingVcenterId === '' && selectedHost === '')"
162158
:loading="loading"
163159
type="primary"
164160
@click="listVmwareDatacenterVms">{{ $t('label.list.vmware.vcenter.vms') }}</a-button>
@@ -254,7 +250,7 @@ export default {
254250
} else {
255251
params.existingvcenterid = this.selectedExistingVcenterId
256252
}
257-
params.host = this.selectedHost
253+
params.hostname = this.selectedHost
258254
api('listVmwareDcVms', params).then(json => {
259255
const obj = {
260256
params: params,
@@ -284,8 +280,8 @@ export default {
284280
listZoneVmwareDcs () {
285281
this.loading = true
286282
api('listVmwareDcs', { zoneid: this.sourcezoneid }).then(response => {
287-
if (response.listvmwaredcsresponse.vmwaredc && response.listvmwaredcsresponse.vmwaredc.length > 0) {
288-
this.existingvcenter = response.listvmwaredcsresponse.vmwaredc
283+
if (response.listvmwaredcsresponse.VMwareDC && response.listvmwaredcsresponse.VMwareDC.length > 0) {
284+
this.existingvcenter = response.listvmwaredcsresponse.VMwareDC
289285
}
290286
}).catch(error => {
291287
this.$notifyError(error)
@@ -327,6 +323,14 @@ export default {
327323
this.selectedHost = value
328324
},
329325
onVcenterTypeChange () {
326+
if (this.vcenterSelectedOption === 'new') {
327+
this.hosts = []
328+
} else if (this.vcenterSelectedOption === 'existing') {
329+
this.form.sourcezoneid = null
330+
this.selectedExistingVcenterId = ''
331+
this.selectedHost = ''
332+
this.form.vmwaredatacenter = null
333+
}
330334
this.$emit('onVcenterTypeChanged', this.vcenterSelectedOption)
331335
}
332336
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,27 @@ private boolean isUserVMInternalCSName(String vmInternalCSName) {
582582
}
583583
}
584584

585+
public List<VirtualMachineMO> listAllVmsInHost() throws Exception {
586+
List<VirtualMachineMO> vms = new ArrayList<>();
587+
ObjectContent[] ocs = getVmPropertiesOnHyperHost(new String[] {"name"});
588+
if (ocs != null) {
589+
for (ObjectContent oc : ocs) {
590+
ManagedObjectReference mor = oc.getObj();
591+
if (mor != null) {
592+
VirtualMachineMO vmMo = new VirtualMachineMO(_context, mor);
593+
try {
594+
if (!vmMo.isTemplate()) {
595+
vms.add(vmMo);
596+
}
597+
} catch (Exception e) {
598+
s_logger.debug(String.format("Unexpected error checking instance %s, excluding it: %s", vmMo.getVmName(), e.getMessage()), e);
599+
}
600+
}
601+
}
602+
}
603+
return vms;
604+
}
605+
585606
private void loadVmCache() throws Exception {
586607
if (s_logger.isDebugEnabled())
587608
s_logger.debug("load VM cache on host");

0 commit comments

Comments
 (0)