This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new 66f8a351dd5 migrate Vmware to KVM ui issues (#10413)
66f8a351dd5 is described below

commit 66f8a351dd5767ca86e8b18fb2cc21f74ad60268
Author: dahn <[email protected]>
AuthorDate: Wed Feb 19 12:53:10 2025 +0100

    migrate Vmware to KVM ui issues (#10413)
---
 ui/public/locales/en.json                          |  4 ++-
 ui/src/views/tools/SelectVmwareVcenter.vue         | 32 +++++++++++++++-------
 .../com/cloud/hypervisor/vmware/mo/BaseMO.java     |  4 +++
 3 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 944a24f4219..666d2a31e39 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -1591,6 +1591,8 @@
 "label.prepare.for.shutdown": "Prepare for Shutdown",
 "label.prepareformaintenance": "Prepare for Maintenance",
 "label.presetup": "PreSetup",
+"label.press.enter": "Press enter when done.",
+"label.press.enter.tooltip": "On leaving a any of these fields above, when 
they all contain values, or on pressing enter, ESXi hosts will be retrieved. If 
this is successful, a dropdown will appear with the list of ESXi hosts.",
 "label.prev": "Prev",
 "label.previous": "Previous",
 "label.primera.username.tooltip": "The username with edit privileges",
@@ -3006,7 +3008,7 @@
 "message.license.agreements.not.accepted": "License agreements not accepted.",
 "message.linstor.resourcegroup.description": "Linstor resource group to use 
for primary storage.",
 "message.list.zone.vmware.datacenter.empty": "No VMware Datacenter exists in 
the selected Zone",
-"message.list.zone.vmware.hosts.empty": "No VMware hosts were found in the 
selected Datacenter",
+"message.list.zone.vmware.hosts.empty": "No EXSi hosts were found in the 
selected Datacenter.\nAre the entered credentials correct?\n",
 "message.listnsp.not.return.providerid": "error: listNetworkServiceProviders 
API doesn't return VirtualRouter provider ID.",
 "message.load.host.failed": "Failed to load hosts.",
 "message.loadbalancer.stickypolicy.configuration": "Customize the load 
balancer stickiness policy:",
diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue 
b/ui/src/views/tools/SelectVmwareVcenter.vue
index 1d25657b11b..e93d893e9fc 100644
--- a/ui/src/views/tools/SelectVmwareVcenter.vue
+++ b/ui/src/views/tools/SelectVmwareVcenter.vue
@@ -89,7 +89,8 @@
           <a-input
             v-model:value="vcenter"
             :placeholder="apiParams.vcenter.description"
-            @change="onSelectExternalVmwareDatacenter"
+            @blur="onSelectExternalVmwareDatacenter"
+            @pressEnter="onSelectExternalVmwareDatacenter"
           />
         </a-form-item>
         <a-form-item ref="datacenter" name="datacenter">
@@ -99,7 +100,8 @@
           <a-input
             v-model:value="datacenter"
             :placeholder="apiParams.datacentername.description"
-            @change="onSelectExternalVmwareDatacenter"
+            @blur="onSelectExternalVmwareDatacenter"
+            @pressEnter="onSelectExternalVmwareDatacenter"
           />
         </a-form-item>
         <a-form-item ref="username" name="username">
@@ -109,7 +111,8 @@
           <a-input
             v-model:value="username"
             :placeholder="apiParams.username.description"
-            @change="onSelectExternalVmwareDatacenter"
+            @blur="onSelectExternalVmwareDatacenter"
+            @pressEnter="onSelectExternalVmwareDatacenter"
           />
         </a-form-item>
         <a-form-item ref="password" name="password">
@@ -119,13 +122,16 @@
           <a-input-password
             v-model:value="password"
             :placeholder="apiParams.password.description"
-            @change="onSelectExternalVmwareDatacenter"
+            @blur="onSelectExternalVmwareDatacenter"
+            @pressEnter="onSelectExternalVmwareDatacenter"
           />
         </a-form-item>
+        &nbsp;
+        <tooltip-label :title="$t('label.press.enter')" 
:tooltip="$t('label.press.enter.tooltip')"/>
       </div>
       <div
         v-if="selectedExistingVcenterId || (vcenterSelectedOption === 'new')">
-        <a-form-item :label="$t('label.vcenter.host')" ref="host" name="host" 
v-if="hosts.length > 0">
+        <a-form-item :label="$t('label.esx.host')" ref="host" name="host" 
v-if="hosts.length > 0">
           <a-select
             v-model:value="form.host"
             :loading="loading"
@@ -133,8 +139,9 @@
             :filterOption="(input, option) => {
               return  option.label.toLowerCase().indexOf(input.toLowerCase()) 
>= 0
             }"
-            :placeholder="$t('label.vcenter.host')"
+            :placeholder="$t('label.esx.host')"
             @change="onSelectExistingVmwareHost">
+            <a-select-option key="" label="">{{ }}</a-select-option>
             <a-select-option v-for="opt in hosts" :key="opt.name">
                 {{ 'ESXi: ' + opt.name }}
             </a-select-option>
@@ -283,7 +290,7 @@ export default {
         this.loading = false
       })
     },
-    listZoneVmwareDcHosts () {
+    loadZoneVmwareDcHosts (doNotify) {
       this.loading = true
       const params = {}
       if (this.vcenterSelectedOption === 'new') {
@@ -299,18 +306,23 @@ export default {
           this.hosts = response.listvmwaredchostsresponse.host
         }
       }).catch(error => {
-        this.$notifyError(error)
+        if (doNotify) {
+          this.$notifyError(error)
+        }
+        this.hosts = []
+        return false
       }).finally(() => {
         this.loading = false
+        return true
       })
     },
     onSelectExistingVmwareDatacenter (value) {
       this.selectedExistingVcenterId = value
-      this.listZoneVmwareDcHosts()
+      this.loadZoneVmwareDcHosts(true)
     },
     onSelectExternalVmwareDatacenter (value) {
       if (this.vcenterSelectedOption === 'new' && !(this.vcenter === '' || 
this.datacentername === '' || this.username === '' || this.password === '')) {
-        this.listZoneVmwareDcHosts()
+        this.loadZoneVmwareDcHosts(false)
       }
     },
     onSelectExistingVmwareHost (value) {
diff --git 
a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java 
b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java
index 15fc4ab8b2e..27ca6396a47 100644
--- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java
+++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java
@@ -33,6 +33,7 @@ import com.vmware.vim25.ObjectContent;
 import com.vmware.vim25.RetrieveResult;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 import java.util.List;
 
 public class BaseMO {
@@ -65,6 +66,9 @@ public class BaseMO {
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("vmware result : " + 
ReflectionToStringBuilderUtils.reflectCollection(result));
         }
+        if (result == null) {
+            return new Pair<>(null, new ArrayList<>());
+        }
         String tokenForRetrievingNewResults = result.getToken();
         List<ObjectContent> listOfObjects = result.getObjects();
         return new Pair<>(tokenForRetrievingNewResults, listOfObjects);

Reply via email to