From e6503f5fd3079cb5c28465cd4b30cb4c3a7d1393 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 17 Feb 2025 18:50:45 +0100 Subject: [PATCH 01/11] ui fixes for vmware to kvm migration --- ui/src/views/tools/SelectVmwareVcenter.vue | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 1d25657b11bf..0880170a2a76 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -135,6 +135,7 @@ }" :placeholder="$t('label.vcenter.host')" @change="onSelectExistingVmwareHost"> + {{ }} {{ 'ESXi: ' + opt.name }} @@ -283,7 +284,7 @@ export default { this.loading = false }) }, - listZoneVmwareDcHosts () { + listZoneVmwareDcHosts (doNotify) { this.loading = true const params = {} if (this.vcenterSelectedOption === 'new') { @@ -299,18 +300,22 @@ export default { this.hosts = response.listvmwaredchostsresponse.host } }).catch(error => { - this.$notifyError(error) + if (doNotify) { + this.$notifyError(error) + } + return false }).finally(() => { this.loading = false + return true }) }, onSelectExistingVmwareDatacenter (value) { this.selectedExistingVcenterId = value - this.listZoneVmwareDcHosts() + this.listZoneVmwareDcHosts(true) }, onSelectExternalVmwareDatacenter (value) { if (this.vcenterSelectedOption === 'new' && !(this.vcenter === '' || this.datacentername === '' || this.username === '' || this.password === '')) { - this.listZoneVmwareDcHosts() + this.listZoneVmwareDcHosts(false) } }, onSelectExistingVmwareHost (value) { From 4be0fb034d669ccc2f098ac749152ce682f134d2 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 17 Feb 2025 18:57:42 +0100 Subject: [PATCH 02/11] reset host list when login fails --- ui/src/views/tools/SelectVmwareVcenter.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 0880170a2a76..0e6d0e6e9fac 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -303,6 +303,7 @@ export default { if (doNotify) { this.$notifyError(error) } + this.hosts = [] return false }).finally(() => { this.loading = false From 4e9a442e2570f57ce0390e15a2413f7eda67ee0e Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 17 Feb 2025 19:26:22 +0100 Subject: [PATCH 03/11] change label from vcenter host to esxi host --- ui/src/views/tools/SelectVmwareVcenter.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 0e6d0e6e9fac..7725c66d67d4 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -125,7 +125,7 @@
- + {{ }} From 0a4f163483e13f47616bc7690c69decbeb082ef3 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 18 Feb 2025 09:02:23 +0100 Subject: [PATCH 04/11] comments --- ui/public/locales/en.json | 2 +- ui/src/views/tools/SelectVmwareVcenter.vue | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 944a24f42196..4c06ae7ce93b 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -3006,7 +3006,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 credentials complete?\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 7725c66d67d4..1598627fe3af 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -284,7 +284,7 @@ export default { this.loading = false }) }, - listZoneVmwareDcHosts (doNotify) { + loadZoneVmwareDcHosts (doNotify) { this.loading = true const params = {} if (this.vcenterSelectedOption === 'new') { @@ -312,11 +312,11 @@ export default { }, onSelectExistingVmwareDatacenter (value) { this.selectedExistingVcenterId = value - this.listZoneVmwareDcHosts(true) + this.loadZoneVmwareDcHosts(true) }, onSelectExternalVmwareDatacenter (value) { if (this.vcenterSelectedOption === 'new' && !(this.vcenter === '' || this.datacentername === '' || this.username === '' || this.password === '')) { - this.listZoneVmwareDcHosts(false) + this.loadZoneVmwareDcHosts(false) } }, onSelectExistingVmwareHost (value) { From f0e9393d2c4307745d398fd57c04b60b28cbe5b9 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 18 Feb 2025 10:22:13 +0100 Subject: [PATCH 05/11] return needed on error --- ui/src/views/tools/SelectVmwareVcenter.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 1598627fe3af..2081cc28f8dd 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -304,10 +304,9 @@ export default { this.$notifyError(error) } this.hosts = [] - return false + return }).finally(() => { this.loading = false - return true }) }, onSelectExistingVmwareDatacenter (value) { From 371188bbc9d8ce610ed08410313dc69f6cc73885 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 18 Feb 2025 10:30:09 +0100 Subject: [PATCH 06/11] Revert "return needed on error" This reverts commit f0e9393d2c4307745d398fd57c04b60b28cbe5b9. --- ui/src/views/tools/SelectVmwareVcenter.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 2081cc28f8dd..1598627fe3af 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -304,9 +304,10 @@ export default { this.$notifyError(error) } this.hosts = [] - return + return false }).finally(() => { this.loading = false + return true }) }, onSelectExistingVmwareDatacenter (value) { From 9b2a83df36c89884d63767f17b55277c694bd9ba Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 18 Feb 2025 11:49:40 +0100 Subject: [PATCH 07/11] handle NPE when a host does not have any VMs --- .../src/main/java/com/cloud/hypervisor/vmware/mo/BaseMO.java | 4 ++++ 1 file changed, 4 insertions(+) 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 15fc4ab8b2e7..27ca6396a470 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.RetrieveResult; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; import java.util.List; public class BaseMO { @@ -65,6 +66,9 @@ protected static Pair> createReturnObjectPair(Retrie 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 listOfObjects = result.getObjects(); return new Pair<>(tokenForRetrievingNewResults, listOfObjects); From f7f81e0d3e82d28c64a26366cd6e5c77ef255cf8 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 18 Feb 2025 15:16:35 +0100 Subject: [PATCH 08/11] only search with PW once the user presses enter --- ui/src/views/tools/SelectVmwareVcenter.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 1598627fe3af..68d2974c4255 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -119,7 +119,7 @@
From 2ef9a9fd9cead303353060c08e1b1b1b8e2c3616 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 18 Feb 2025 15:49:39 +0100 Subject: [PATCH 09/11] only search with full set on explicit demand --- ui/src/views/tools/SelectVmwareVcenter.vue | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 68d2974c4255..1e0d363c5411 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -89,7 +89,8 @@ @@ -99,7 +100,8 @@ @@ -109,16 +111,20 @@ From e9fc6f4591e92c8b3bf06da0aa5ba613a3cf9812 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 19 Feb 2025 10:13:59 +0100 Subject: [PATCH 10/11] message --- ui/public/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 4c06ae7ce93b..c21080e746f6 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -3006,7 +3006,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 EXSi hosts were found in the selected Datacenter.\nAre the credentials complete?\n", +"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:", From 23cc58d5f0f43636405301decc1bcc5db906b246 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 19 Feb 2025 11:56:21 +0100 Subject: [PATCH 11/11] better messaging --- ui/public/locales/en.json | 2 ++ ui/src/views/tools/SelectVmwareVcenter.vue | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index c21080e746f6..666d2a31e39b 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", diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index 1e0d363c5411..e93d893e9fca 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -118,8 +118,6 @@ +   +