From 2643854173ee10acaf1165d14928b1c0d30361a3 Mon Sep 17 00:00:00 2001 From: davidjumani Date: Tue, 27 Jul 2021 14:57:55 +0530 Subject: [PATCH 1/5] ui: Fix current for vmsnapshots (#5247) --- ui/public/locales/en.json | 2 +- ui/src/components/view/ListView.vue | 3 +++ ui/src/components/widgets/Status.vue | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 0da52865a96..146351f834c 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -636,7 +636,7 @@ "label.credit": "Credit", "label.crosszones": "Cross Zones", "label.currency": "Currency", -"label.current": "isCurrent", +"label.current": "Current", "label.currentpassword": "Current Password", "label.custom": "Custom", "label.custom.disk.offering": "Custom Disk Offering", diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index 85f49b3f846..9d77750555c 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -233,6 +233,9 @@ + + + {{ $toLocaleDate(text) }} diff --git a/ui/src/components/widgets/Status.vue b/ui/src/components/widgets/Status.vue index fa8fe1a3b20..b73bec799a5 100644 --- a/ui/src/components/widgets/Status.vue +++ b/ui/src/components/widgets/Status.vue @@ -94,6 +94,7 @@ export default { case 'Successfully Installed': case 'ReadWrite': case 'True': + case 'true': case 'Up': case 'enabled': status = 'success' @@ -105,6 +106,7 @@ export default { case 'Down': case 'Error': case 'False': + case 'false': case 'Stopped': case 'ReadOnly': status = 'error' From a436869212f158af741cf9b8966977ff8f577548 Mon Sep 17 00:00:00 2001 From: davidjumani Date: Tue, 27 Jul 2021 14:58:18 +0530 Subject: [PATCH 2/5] ui: Fix comparator for boolean (#5246) --- ui/src/utils/sort.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/utils/sort.js b/ui/src/utils/sort.js index 4934c887b35..b2f3d5451ca 100644 --- a/ui/src/utils/sort.js +++ b/ui/src/utils/sort.js @@ -23,7 +23,7 @@ function filterNumber (value) { } function stringComparator (a, b) { - return a.localeCompare(b) + return a.toString().localeCompare(b.toString()) } function numericComparator (a, b) { From 826e479cf55f34e58170be34920acd05efdfe637 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Tue, 27 Jul 2021 15:00:56 +0530 Subject: [PATCH 3/5] api: Fix pagination for list PublicIPAddresses (#5231) * api: Fix pagination for list PublicIPAddresses * refactor based on comment --- .../main/java/com/cloud/server/ManagementServerImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 65204e82335..bec025f0685 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -2111,7 +2111,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } } - final Filter searchFilter = new Filter(IPAddressVO.class, "address", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + final Filter searchFilter = new Filter(IPAddressVO.class, "address", false, null, null); final SearchBuilder sb = _publicIpAddressDao.createSearchBuilder(); Long domainId = null; Boolean isRecursive = null; @@ -2197,7 +2197,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe sc2.setParameters("ids", freeAddrIds.toArray()); addrs.addAll(_publicIpAddressDao.search(sc2, searchFilter)); // Allocated + Free } - + List wPagination = com.cloud.utils.StringUtils.applyPagination(addrs, cmd.getStartIndex(), cmd.getPageSizeVal()); + if (wPagination != null) { + return new Pair, Integer>(wPagination, addrs.size()); + } return new Pair<>(addrs, addrs.size()); } From 8ed5a4fae6de0cc8a59beb795ae737ecc74d1201 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 27 Jul 2021 15:01:54 +0530 Subject: [PATCH 4/5] ui: fix create shared network with multi-zone (#5205) Fixes create shared network form for multi-zone environments. Signed-off-by: Abhishek Kumar --- .../views/network/CreateSharedNetworkForm.vue | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/ui/src/views/network/CreateSharedNetworkForm.vue b/ui/src/views/network/CreateSharedNetworkForm.vue index d2356dbc73a..b45c251182c 100644 --- a/ui/src/views/network/CreateSharedNetworkForm.vue +++ b/ui/src/views/network/CreateSharedNetworkForm.vue @@ -93,7 +93,7 @@ :filterOption="(input, option) => { return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 }" - :loading="zoneLoading" + :loading="formPhysicalNetworkLoading" :placeholder="this.$t('label.physicalnetworkid')" @change="val => { this.handlePhysicalNetworkChange(this.formPhysicalNetworks[val]) }"> @@ -542,57 +542,67 @@ export default { this.fetchPhysicalNetworkData() }, fetchPhysicalNetworkData () { + this.formSelectedPhysicalNetwork = {} + this.formPhysicalNetworks = [] if (this.physicalNetworks != null) { this.formPhysicalNetworks = this.physicalNetworks - if (this.arrayHasItems(this.formPhysicalNetworks)) { - this.form.setFieldsValue({ - physicalnetworkid: 0 - }) - this.handlePhysicalNetworkChange(this.formPhysicalNetworks[0]) - } + this.selectFirstPhysicalNetwork() } else { if (this.selectedZone === null || this.selectedZone === undefined) { return } - const params = {} - params.zoneid = this.selectedZone.id - this.formPhysicalNetworksLoading = true + const promises = [] + const params = { + zoneid: this.selectedZone.id + } + this.formPhysicalNetworkLoading = true api('listPhysicalNetworks', params).then(json => { - this.formPhysicalNetworks = [] var networks = json.listphysicalnetworksresponse.physicalnetwork if (this.arrayHasItems(networks)) { - for (const i in networks) { - this.addPhysicalNetworkForGuestTrafficType(networks[i]) + for (const network of networks) { + promises.push(this.addPhysicalNetworkForGuestTrafficType(network)) } } else { this.formPhysicalNetworkLoading = false } }).finally(() => { + if (this.arrayHasItems(promises)) { + Promise.all(promises).catch(error => { + this.$notifyError(error) + }).finally(() => { + this.formPhysicalNetworkLoading = false + this.selectFirstPhysicalNetwork() + }) + } }) } }, + selectFirstPhysicalNetwork () { + if (this.arrayHasItems(this.formPhysicalNetworks)) { + this.form.setFieldsValue({ + physicalnetworkid: 0 + }) + this.handlePhysicalNetworkChange(this.formPhysicalNetworks[0]) + } + }, addPhysicalNetworkForGuestTrafficType (physicalNetwork) { const params = {} params.physicalnetworkid = physicalNetwork.id - api('listTrafficTypes', params).then(json => { - var trafficTypes = json.listtraffictypesresponse.traffictype - if (this.arrayHasItems(trafficTypes)) { - for (const i in trafficTypes) { - if (trafficTypes[i].traffictype === 'Guest') { - this.formPhysicalNetworks.push(physicalNetwork) - break + return new Promise((resolve, reject) => { + api('listTrafficTypes', params).then(json => { + var trafficTypes = json.listtraffictypesresponse.traffictype + if (this.arrayHasItems(trafficTypes)) { + for (const type of trafficTypes) { + if (type.traffictype === 'Guest') { + this.formPhysicalNetworks.push(physicalNetwork) + break + } } } - } else { - this.formPhysicalNetworkLoading = false - } - }).finally(() => { - if (this.formPhysicalNetworks.length > 0 && this.isObjectEmpty(this.formSelectedPhysicalNetwork)) { - this.form.setFieldsValue({ - physicalnetworkid: 0 - }) - this.handlePhysicalNetworkChange(this.formPhysicalNetworks[0]) - } + resolve() + }).catch(error => { + reject(error) + }) }) }, handlePhysicalNetworkChange (physicalNet) { From 6540d9965b50afcf4a6de8b7c6743da836d365a9 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 27 Jul 2021 15:03:45 +0530 Subject: [PATCH 5/5] ui: submit form with false boolean params (#5224) Skip only empty strings while submitting UI form. Fixes #5223 Signed-off-by: Abhishek Kumar --- ui/src/views/AutogenView.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index f274ecf5444..73fff05f03e 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -995,15 +995,15 @@ export default { if (param.name !== key) { continue } - if (!input === undefined || input === null || + if (input === undefined || input === null || (input === '' && !['updateStoragePool', 'updateHost', 'updatePhysicalNetwork', 'updateDiskOffering', 'updateNetworkOffering'].includes(action.api))) { if (param.type === 'boolean') { params[key] = false } break } - if (!input && input !== 0 && !['tags'].includes(key)) { - continue + if (input === '' && !['tags'].includes(key)) { + break } if (action.mapping && key in action.mapping && action.mapping[key].options) { params[key] = action.mapping[key].options[input]