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 ad66edf6e65 UI: Add search filters (#9068)
ad66edf6e65 is described below

commit ad66edf6e6522fd816252367fd1f447308bfe5e2
Author: Vishesh <[email protected]>
AuthorDate: Tue May 28 11:08:59 2024 +0530

    UI: Add search filters (#9068)
---
 ui/public/locales/en.json                        |   6 +
 ui/src/components/view/SearchView.vue            | 287 ++++++++++++++++++++++-
 ui/src/config/section/account.js                 |   1 +
 ui/src/config/section/compute.js                 |   6 +-
 ui/src/config/section/config.js                  |   2 +
 ui/src/config/section/image.js                   |   1 +
 ui/src/config/section/infra.js                   |   2 +-
 ui/src/config/section/infra/clusters.js          |   1 +
 ui/src/config/section/infra/hosts.js             |   1 +
 ui/src/config/section/infra/pods.js              |   1 +
 ui/src/config/section/infra/primaryStorages.js   |   1 +
 ui/src/config/section/infra/secondaryStorages.js |   1 +
 ui/src/config/section/infra/systemVms.js         |   1 +
 ui/src/config/section/infra/zones.js             |   1 +
 ui/src/config/section/network.js                 |   2 +-
 ui/src/config/section/offering.js                |   6 +
 ui/src/config/section/role.js                    |   1 +
 17 files changed, 316 insertions(+), 5 deletions(-)

diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 1f6a2057c49..89abfe5981f 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -708,6 +708,7 @@
 "label.destnetworkuuid": "Network",
 "label.destport": "Destination Ports",
 "label.destroy": "Destroy",
+"label.destroying": "Destroying",
 "label.destroyed": "Destroyed",
 "label.destroy.router": "Destroy router",
 "label.deststartport": "Destination Start Port",
@@ -931,6 +932,7 @@
 "label.fwdeviceid": "ID",
 "label.fwdevicestate": "Status",
 "label.gateway": "Gateway",
+"label.global": "Global",
 "label.global.settings": "Global Settings",
 "label.globo.dns": "GloboDNS",
 "label.globo.dns.configuration": "GloboDNS configuration",
@@ -1343,6 +1345,7 @@
 "label.min_balance": "Min balance",
 "label.mincpunumber": "Min CPU cores",
 "label.minimum": "Minimum",
+"label.minimumsemanticversion": "Minimum semantic version",
 "label.miniops": "Min IOPS",
 "label.minmaxiops": "Min IOPS / Max IOPS",
 "label.minmembers": "Min members",
@@ -1682,6 +1685,7 @@
 "label.reboot": "Reboot",
 "label.receivedbytes": "Bytes received",
 "label.recover.vm": "Recover Instance",
+"label.recovering": "Recovering",
 "label.redirect": "Redirect to:",
 "label.redirecturi": "Redirect URI",
 "label.redundantrouter": "Redundant router",
@@ -1824,6 +1828,7 @@
 "label.scaledown.policy": "ScaleDown policy",
 "label.scaleup.policies": "ScaleUp policies",
 "label.scaleup.policy": "ScaleUp policy",
+"label.scaling": "Scaling",
 "label.schedule": "Schedule",
 "label.schedule.add": "Add schedule",
 "label.scheduled.backups": "Scheduled backups",
@@ -2188,6 +2193,7 @@
 "label.update.vmware.datacenter": "Update VMWare datacenter",
 "label.updating": "Updating",
 "label.upgrade.router.newer.template": "Upgrade router to use newer Template",
+"label.upgrading": "Upgrading",
 "label.upload": "Upload",
 "label.upload.description": "Path to upload objects at",
 "label.upload.path": "Upload path",
diff --git a/ui/src/components/view/SearchView.vue 
b/ui/src/components/view/SearchView.vue
index 7a2154ad426..43f07c7456b 100644
--- a/ui/src/components/view/SearchView.vue
+++ b/ui/src/components/view/SearchView.vue
@@ -79,7 +79,7 @@
                           </span>
                           <global-outlined v-else style="margin-right: 5px" />
                         </span>
-                        <span v-if="(field.name.startsWith('domain'))">
+                        <span v-if="(field.name.startsWith('domain') || 
field.name === 'account')">
                           <span v-if="opt.icon">
                             <resource-icon :image="opt.icon.base64image" 
size="1x" style="margin-right: 5px"/>
                           </span>
@@ -268,6 +268,9 @@ export default {
         if (item === 'domainid' && !('listDomains' in 
this.$store.getters.apis)) {
           return true
         }
+        if (item === 'account' && !('listAccounts' in 
this.$store.getters.apis)) {
+          return true
+        }
         if (item === 'account' && !('addAccountToProject' in 
this.$store.getters.apis || 'createAccount' in this.$store.getters.apis)) {
           return true
         }
@@ -280,7 +283,10 @@ export default {
         if (item === 'groupid' && !('listInstanceGroups' in 
this.$store.getters.apis)) {
           return true
         }
-        if (['zoneid', 'domainid', 'imagestoreid', 'storageid', 'state', 
'level', 'clusterid', 'podid', 'groupid', 'entitytype', 'type'].includes(item)) 
{
+        if (['zoneid', 'domainid', 'imagestoreid', 'storageid', 'state', 
'account', 'hypervisor', 'level',
+          'clusterid', 'podid', 'groupid', 'entitytype', 'accounttype', 
'systemvmtype', 'scope', 'provider',
+          'type'].includes(item)
+        ) {
           type = 'list'
         } else if (item === 'tags') {
           type = 'tag'
@@ -305,6 +311,11 @@ export default {
           this.fields[typeIndex].loading = true
           this.fields[typeIndex].opts = this.fetchGuestNetworkTypes()
           this.fields[typeIndex].loading = false
+        } else if (this.$route.path === '/role' || 
this.$route.path.includes('/role/')) {
+          const typeIndex = this.fields.findIndex(item => item.name === 'type')
+          this.fields[typeIndex].loading = true
+          this.fields[typeIndex].opts = this.fetchRoleTypes()
+          this.fields[typeIndex].loading = false
         }
       }
 
@@ -329,6 +340,34 @@ export default {
         this.fields[entityTypeIndex].loading = false
       }
 
+      if (arrayField.includes('accounttype')) {
+        const accountTypeIndex = this.fields.findIndex(item => item.name === 
'accounttype')
+        this.fields[accountTypeIndex].loading = true
+        this.fields[accountTypeIndex].opts = this.fetchAccountTypes()
+        this.fields[accountTypeIndex].loading = false
+      }
+
+      if (arrayField.includes('systemvmtype')) {
+        const systemVmTypeIndex = this.fields.findIndex(item => item.name === 
'systemvmtype')
+        this.fields[systemVmTypeIndex].loading = true
+        this.fields[systemVmTypeIndex].opts = this.fetchSystemVmTypes()
+        this.fields[systemVmTypeIndex].loading = false
+      }
+
+      if (arrayField.includes('scope')) {
+        const scopeIndex = this.fields.findIndex(item => item.name === 'scope')
+        this.fields[scopeIndex].loading = true
+        this.fields[scopeIndex].opts = this.fetchStoragePoolScope()
+        this.fields[scopeIndex].loading = false
+      }
+
+      if (arrayField.includes('provider')) {
+        const providerIndex = this.fields.findIndex(item => item.name === 
'provider')
+        this.fields[providerIndex].loading = true
+        this.fields[providerIndex].opts = this.fetchImageStoreProviders()
+        this.fields[providerIndex].loading = false
+      }
+
       if (arrayField.includes('resourcetype')) {
         const resourceTypeIndex = this.fields.findIndex(item => item.name === 
'resourcetype')
         this.fields[resourceTypeIndex].loading = true
@@ -351,6 +390,8 @@ export default {
       let typeIndex = -1
       let zoneIndex = -1
       let domainIndex = -1
+      let accountIndex = -1
+      let hypervisorIndex = -1
       let imageStoreIndex = -1
       let storageIndex = -1
       let podIndex = -1
@@ -362,6 +403,10 @@ export default {
           typeIndex = this.fields.findIndex(item => item.name === 'type')
           this.fields[typeIndex].loading = true
           promises.push(await this.fetchAlertTypes())
+        } else if (this.$route.path === '/affinitygroup') {
+          typeIndex = this.fields.findIndex(item => item.name === 'type')
+          this.fields[typeIndex].loading = true
+          promises.push(await this.fetchAffinityGroupTypes())
         }
       }
 
@@ -377,6 +422,18 @@ export default {
         promises.push(await this.fetchDomains(searchKeyword))
       }
 
+      if (arrayField.includes('account')) {
+        accountIndex = this.fields.findIndex(item => item.name === 'account')
+        this.fields[accountIndex].loading = true
+        promises.push(await this.fetchAccounts(searchKeyword))
+      }
+
+      if (arrayField.includes('hypervisor')) {
+        hypervisorIndex = this.fields.findIndex(item => item.name === 
'hypervisor')
+        this.fields[hypervisorIndex].loading = true
+        promises.push(await this.fetchHypervisors())
+      }
+
       if (arrayField.includes('imagestoreid')) {
         imageStoreIndex = this.fields.findIndex(item => item.name === 
'imagestoreid')
         this.fields[imageStoreIndex].loading = true
@@ -426,6 +483,18 @@ export default {
             this.fields[domainIndex].opts = this.sortArray(domain[0].data, 
'path')
           }
         }
+        if (accountIndex > -1) {
+          const account = response.filter(item => item.type === 'account')
+          if (account && account.length > 0) {
+            this.fields[accountIndex].opts = this.sortArray(account[0].data, 
'name')
+          }
+        }
+        if (hypervisorIndex > -1) {
+          const hypervisor = response.filter(item => item.type === 
'hypervisor')
+          if (hypervisor && hypervisor.length > 0) {
+            this.fields[hypervisorIndex].opts = 
this.sortArray(hypervisor[0].data, 'name')
+          }
+        }
         if (imageStoreIndex > -1) {
           const imageStore = response.filter(item => item.type === 
'imagestoreid')
           if (imageStore && imageStore.length > 0) {
@@ -539,6 +608,32 @@ export default {
         })
       })
     },
+    fetchAccounts (searchKeyword) {
+      return new Promise((resolve, reject) => {
+        api('listAccounts', { listAll: true, showicon: true, keyword: 
searchKeyword }).then(json => {
+          const account = json.listaccountsresponse.account
+          resolve({
+            type: 'account',
+            data: account
+          })
+        }).catch(error => {
+          reject(error.response.headers['x-description'])
+        })
+      })
+    },
+    fetchHypervisors () {
+      return new Promise((resolve, reject) => {
+        api('listHypervisors').then(json => {
+          const hypervisor = json.listhypervisorsresponse.hypervisor.map(a => 
{ return { id: a.name, name: a.name } })
+          resolve({
+            type: 'hypervisor',
+            data: hypervisor
+          })
+        }).catch(error => {
+          reject(error.response.headers['x-description'])
+        })
+      })
+    },
     fetchImageStores (searchKeyword) {
       return new Promise((resolve, reject) => {
         api('listImageStores', { listAll: true, showicon: true, keyword: 
searchKeyword }).then(json => {
@@ -627,6 +722,41 @@ export default {
         })
       }
     },
+    fetchAffinityGroupTypes () {
+      if (this.alertTypes.length > 0) {
+        return new Promise((resolve, reject) => {
+          resolve({
+            type: 'type',
+            data: this.alertTypes
+          })
+        })
+      } else {
+        return new Promise((resolve, reject) => {
+          api('listAffinityGroupTypes').then(json => {
+            const alerttypes = 
json.listaffinitygrouptypesresponse.affinityGroupType.map(a => {
+              let name = a.type
+              if (a.type === 'host anti-affinity') {
+                name = 'host anti-affinity (Strict)'
+              } else if (a.type === 'host affinity') {
+                name = 'host affinity (Strict)'
+              } else if (a.type === 'non-strict host anti-affinity') {
+                name = 'host anti-affinity (Non-Strict)'
+              } else if (a.type === 'non-strict host affinity') {
+                name = 'host affinity (Non-Strict)'
+              }
+              return { id: a.type, name: name }
+            })
+            this.alertTypes = alerttypes
+            resolve({
+              type: 'type',
+              data: alerttypes
+            })
+          }).catch(error => {
+            reject(error.response.headers['x-description'])
+          })
+        })
+      }
+    },
     fetchGuestNetworkTypes () {
       const types = []
       if (this.apiName.indexOf('listNetworks') > -1) {
@@ -645,6 +775,108 @@ export default {
       }
       return types
     },
+    fetchAccountTypes () {
+      const types = []
+      if (this.apiName.indexOf('listAccounts') > -1) {
+        types.push({
+          id: '1',
+          name: 'Admin'
+        })
+        types.push({
+          id: '2',
+          name: 'DomainAdmin'
+        })
+        types.push({
+          id: '3',
+          name: 'User'
+        })
+      }
+      return types
+    },
+    fetchSystemVmTypes () {
+      const types = []
+      if (this.apiName.indexOf('listSystemVms') > -1) {
+        types.push({
+          id: 'consoleproxy',
+          name: 'label.console.proxy.vm'
+        })
+        types.push({
+          id: 'secondarystoragevm',
+          name: 'label.secondary.storage.vm'
+        })
+      }
+      return types
+    },
+    fetchStoragePoolScope () {
+      const types = []
+      if (this.apiName.indexOf('listStoragePools') > -1) {
+        types.push({
+          id: 'HOST',
+          name: 'label.hostname'
+        })
+        types.push({
+          id: 'CLUSTER',
+          name: 'label.cluster'
+        })
+        types.push({
+          id: 'ZONE',
+          name: 'label.zone'
+        })
+        types.push({
+          id: 'REGION',
+          name: 'label.region'
+        })
+        types.push({
+          id: 'GLOBAL',
+          name: 'label.global'
+        })
+      }
+      return types
+    },
+    fetchImageStoreProviders () {
+      const types = []
+      if (this.apiName.indexOf('listImageStores') > -1) {
+        types.push({
+          id: 'NFS',
+          name: 'NFS'
+        })
+        types.push({
+          id: 'SMB/CIFS',
+          name: 'SMB/CIFS'
+        })
+        types.push({
+          id: 'S3',
+          name: 'S3'
+        })
+        types.push({
+          id: 'Swift',
+          name: 'Swift'
+        })
+      }
+      return types
+    },
+    fetchRoleTypes () {
+      const types = []
+      if (this.apiName.indexOf('listRoles') > -1) {
+        types.push({
+          id: 'Admin',
+          name: 'Admin'
+        })
+        types.push({
+          id: 'ResourceAdmin',
+          name: 'ResourceAdmin'
+        })
+        types.push({
+          id: 'DomainAdmin',
+          name: 'DomainAdmin'
+        })
+        types.push({
+          id: 'User',
+          name: 'User'
+        })
+      }
+      return types
+    },
     fetchState () {
       if (this.apiName.includes('listVolumes')) {
         return [
@@ -673,6 +905,57 @@ export default {
             name: 'label.migrating'
           }
         ]
+      } else if (this.apiName.includes('listKubernetesClusters')) {
+        return [
+          {
+            id: 'Created',
+            name: 'label.created'
+          },
+          {
+            id: 'Starting',
+            name: 'label.starting'
+          },
+          {
+            id: 'Running',
+            name: 'label.running'
+          },
+          {
+            id: 'Stopping',
+            name: 'label.stopping'
+          },
+          {
+            id: 'Stopped',
+            name: 'label.stopped'
+          },
+          {
+            id: 'Scaling',
+            name: 'label.scaling'
+          },
+          {
+            id: 'Upgrading',
+            name: 'label.upgrading'
+          },
+          {
+            id: 'Alert',
+            name: 'label.alert'
+          },
+          {
+            id: 'Recovering',
+            name: 'label.recovering'
+          },
+          {
+            id: 'Destroyed',
+            name: 'label.destroyed'
+          },
+          {
+            id: 'Destroying',
+            name: 'label.destroying'
+          },
+          {
+            id: 'Error',
+            name: 'label.error'
+          }
+        ]
       }
       return []
     },
diff --git a/ui/src/config/section/account.js b/ui/src/config/section/account.js
index 92897a33b12..a35b2b9d5f0 100644
--- a/ui/src/config/section/account.js
+++ b/ui/src/config/section/account.js
@@ -24,6 +24,7 @@ export default {
   icon: 'team-outlined',
   docHelp: 'adminguide/accounts.html',
   permission: ['listAccounts'],
+  searchFilters: ['name', 'accounttype', 'domainid'],
   columns: ['name', 'state', 'rolename', 'roletype', 'domainpath'],
   details: ['name', 'id', 'rolename', 'roletype', 'domainpath', 
'networkdomain', 'iptotal', 'vmtotal', 'volumetotal', 'receivedbytes', 
'sentbytes', 'created'],
   related: [{
diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js
index ba3a21e1539..969402a694c 100644
--- a/ui/src/config/section/compute.js
+++ b/ui/src/config/section/compute.js
@@ -520,6 +520,7 @@ export default {
       title: 'label.kubernetes',
       icon: ['fa-solid', 'fa-dharmachakra'],
       docHelp: 'plugins/cloudstack-kubernetes-service.html',
+      searchFilters: ['name', 'domainid', 'account', 'state'],
       permission: ['listKubernetesClusters'],
       columns: (store) => {
         var fields = ['name', 'state', 'clustertype', 'size', 'cpunumber', 
'memory', 'kubernetesversionname']
@@ -629,6 +630,7 @@ export default {
       docHelp: 'adminguide/autoscale_with_virtual_router.html',
       resourceType: 'AutoScaleVmGroup',
       permission: ['listAutoScaleVmGroups'],
+      searchFilters: ['name', 'zoneid', 'domainid', 'account'],
       columns: (store) => {
         var fields = ['name', 'state', 'associatednetworkname', 'publicip', 
'publicport', 'privateport', 'minmembers', 'maxmembers', 
'availablevirtualmachinecount', 'account']
         if (store.listAllProjects) {
@@ -739,7 +741,7 @@ export default {
       docHelp: 
'adminguide/virtual_machines.html#changing-the-vm-name-os-or-group',
       resourceType: 'VMInstanceGroup',
       permission: ['listInstanceGroups'],
-
+      searchFilters: ['name', 'zoneid', 'domainid', 'account'],
       columns: (store) => {
         var fields = ['name', 'account']
         if (store.listAllProjects) {
@@ -797,6 +799,7 @@ export default {
       icon: 'key-outlined',
       docHelp: 
'adminguide/virtual_machines.html#using-ssh-keys-for-authentication',
       permission: ['listSSHKeyPairs'],
+      searchFilters: ['name', 'domainid', 'account', 'fingerprint'],
       columns: () => {
         var fields = ['name', 'fingerprint']
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
@@ -957,6 +960,7 @@ export default {
       icon: 'swap-outlined',
       docHelp: 'adminguide/virtual_machines.html#affinity-groups',
       permission: ['listAffinityGroups'],
+      searchFilters: ['name', 'zoneid', 'domainid', 'account', 'type'],
       columns: () => {
         var fields = ['name', 'type', 'description']
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
diff --git a/ui/src/config/section/config.js b/ui/src/config/section/config.js
index 6fa33e3ed31..aa108b5b1fa 100644
--- a/ui/src/config/section/config.js
+++ b/ui/src/config/section/config.js
@@ -37,6 +37,7 @@ export default {
       icon: 'team-outlined',
       docHelp: 
'adminguide/accounts.html#using-an-ldap-server-for-user-authentication',
       permission: ['listLdapConfigurations'],
+      searchFilters: ['domainid', 'hostname', 'port'],
       columns: ['hostname', 'port', 'domainid'],
       details: ['hostname', 'port', 'domainid'],
       actions: [
@@ -118,6 +119,7 @@ export default {
       icon: 'database-outlined',
       docHelp: 
'adminguide/hosts.html?highlight=Hypervisor%20capabilities#hypervisor-capabilities',
       permission: ['listHypervisorCapabilities'],
+      searchFilters: ['hypervisor'],
       columns: ['hypervisor', 'hypervisorversion', 'maxguestslimit', 
'maxhostspercluster'],
       details: ['hypervisor', 'hypervisorversion', 'maxguestslimit', 
'maxdatavolumeslimit', 'maxhostspercluster', 'securitygroupenabled', 
'storagemotionenabled'],
       actions: [
diff --git a/ui/src/config/section/image.js b/ui/src/config/section/image.js
index aa21b262037..6f0bd5e9322 100644
--- a/ui/src/config/section/image.js
+++ b/ui/src/config/section/image.js
@@ -367,6 +367,7 @@ export default {
       icon: ['fa-solid', 'fa-dharmachakra'],
       docHelp: 
'plugins/cloudstack-kubernetes-service.html#kubernetes-supported-versions',
       permission: ['listKubernetesSupportedVersions'],
+      searchFilters: ['zoneid', 'minimumsemanticversion'],
       columns: ['name', 'state', 'semanticversion', 'isostate', 
'mincpunumber', 'minmemory', 'zonename'],
       details: ['name', 'semanticversion', 'supportsautoscaling', 'zoneid', 
'zonename', 'isoid', 'isoname', 'isostate', 'mincpunumber', 'minmemory', 
'supportsha', 'state', 'created'],
       actions: [
diff --git a/ui/src/config/section/infra.js b/ui/src/config/section/infra.js
index 5b3b38a68e5..cb91d4d7b04 100644
--- a/ui/src/config/section/infra.js
+++ b/ui/src/config/section/infra.js
@@ -79,7 +79,7 @@ export default {
       permission: ['listAlerts'],
       columns: ['name', 'description', 'type', 'sent'],
       details: ['name', 'id', 'type', 'sent', 'description'],
-      searchFilters: ['type'],
+      searchFilters: ['name', 'type'],
       actions: [
         {
           api: 'archiveAlerts',
diff --git a/ui/src/config/section/infra/clusters.js 
b/ui/src/config/section/infra/clusters.js
index ab8bea6b79d..8b2f37d5b7b 100644
--- a/ui/src/config/section/infra/clusters.js
+++ b/ui/src/config/section/infra/clusters.js
@@ -24,6 +24,7 @@ export default {
   icon: 'cluster-outlined',
   docHelp: 'conceptsandterminology/concepts.html#about-clusters',
   permission: ['listClustersMetrics'],
+  searchFilters: ['name', 'zoneid', 'podid', 'hypervisor'],
   columns: () => {
     const fields = ['name', 'state', 'allocationstate', 'clustertype', 
'hypervisortype', 'hosts']
     const metricsFields = ['cpuused', 'cpumaxdeviation', 'cpuallocated', 
'cputotal', 'memoryused', 'memorymaxdeviation', 'memoryallocated', 
'memorytotal', 'drsimbalance']
diff --git a/ui/src/config/section/infra/hosts.js 
b/ui/src/config/section/infra/hosts.js
index d92f4af21e6..329b77fe2d7 100644
--- a/ui/src/config/section/infra/hosts.js
+++ b/ui/src/config/section/infra/hosts.js
@@ -24,6 +24,7 @@ export default {
   icon: 'database-outlined',
   docHelp: 'conceptsandterminology/concepts.html#about-hosts',
   permission: ['listHostsMetrics'],
+  searchFilters: ['name', 'zoneid', 'podid', 'clusterid', 'hypervisor'],
   resourceType: 'Host',
   filters: () => {
     const filters = ['enabled', 'disabled', 'maintenance', 'up', 'down', 
'alert']
diff --git a/ui/src/config/section/infra/pods.js 
b/ui/src/config/section/infra/pods.js
index eff62e0a4a2..595b35f4fb9 100644
--- a/ui/src/config/section/infra/pods.js
+++ b/ui/src/config/section/infra/pods.js
@@ -24,6 +24,7 @@ export default {
   icon: 'appstore-outlined',
   docHelp: 'conceptsandterminology/concepts.html#about-pods',
   permission: ['listPods'],
+  searchFilters: ['name', 'zoneid'],
   columns: ['name', 'allocationstate', 'gateway', 'netmask', 'zonename'],
   details: ['name', 'id', 'allocationstate', 'netmask', 'gateway', 'zonename'],
   related: [{
diff --git a/ui/src/config/section/infra/primaryStorages.js 
b/ui/src/config/section/infra/primaryStorages.js
index f222edeaf70..74624b3e888 100644
--- a/ui/src/config/section/infra/primaryStorages.js
+++ b/ui/src/config/section/infra/primaryStorages.js
@@ -24,6 +24,7 @@ export default {
   icon: 'hdd-outlined',
   docHelp: 'adminguide/storage.html#primary-storage',
   permission: ['listStoragePoolsMetrics'],
+  searchFilters: ['name', 'zoneid', 'podid', 'clusterid', 'ipaddress', 'path', 
'scope'],
   columns: () => {
     const fields = ['name', 'state', 'ipaddress', 'scope', 'type', 'path']
     const metricsFields = ['disksizeusedgb', 'disksizetotalgb', 
'disksizeallocatedgb', 'disksizeunallocatedgb']
diff --git a/ui/src/config/section/infra/secondaryStorages.js 
b/ui/src/config/section/infra/secondaryStorages.js
index 774c233c446..53fa546d934 100644
--- a/ui/src/config/section/infra/secondaryStorages.js
+++ b/ui/src/config/section/infra/secondaryStorages.js
@@ -24,6 +24,7 @@ export default {
   icon: 'picture-outlined',
   docHelp: 'adminguide/storage.html#secondary-storage',
   permission: ['listImageStores'],
+  searchFilters: ['name', 'zoneid', 'provider'],
   columns: () => {
     var fields = ['name', 'url', 'protocol', 'scope', 'zonename']
     if (store.getters.apis.listImageStores.params.filter(x => x.name === 
'readonly').length > 0) {
diff --git a/ui/src/config/section/infra/systemVms.js 
b/ui/src/config/section/infra/systemVms.js
index 68a27f73a52..3ecd17f95ca 100644
--- a/ui/src/config/section/infra/systemVms.js
+++ b/ui/src/config/section/infra/systemVms.js
@@ -24,6 +24,7 @@ export default {
   icon: 'thunderbolt-outlined',
   docHelp: 'adminguide/systemvm.html',
   permission: ['listSystemVms'],
+  searchFilters: ['name', 'zoneid', 'podid', 'hostid', 'systemvmtype', 
'storageid'],
   columns: ['name', 'state', 'agentstate', 'systemvmtype', 'publicip', 
'privateip', 'linklocalip', 'version', 'hostname', 'zonename'],
   details: ['name', 'id', 'agentstate', 'systemvmtype', 'publicip', 
'privateip', 'linklocalip', 'gateway', 'hostname', 'version', 'zonename', 
'created', 'activeviewersessions', 'isdynamicallyscalable', 'hostcontrolstate'],
   resourceType: 'SystemVm',
diff --git a/ui/src/config/section/infra/zones.js 
b/ui/src/config/section/infra/zones.js
index b2768f77343..929add5210d 100644
--- a/ui/src/config/section/infra/zones.js
+++ b/ui/src/config/section/infra/zones.js
@@ -24,6 +24,7 @@ export default {
   icon: 'global-outlined',
   docHelp: 'conceptsandterminology/concepts.html#about-zones',
   permission: ['listZonesMetrics'],
+  searchFilters: ['name', 'domainid', 'tags'],
   columns: () => {
     const fields = ['name', 'allocationstate', 'type', 'networktype', 
'clusters']
     const metricsFields = ['cpuused', 'cpumaxdeviation', 'cpuallocated', 
'cputotal', 'memoryused', 'memorymaxdeviation', 'memoryallocated', 
'memorytotal']
diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js
index 3d5241feb59..65abdd6bec8 100644
--- a/ui/src/config/section/network.js
+++ b/ui/src/config/section/network.js
@@ -748,6 +748,7 @@ export default {
       icon: 'environment-outlined',
       docHelp: 
'adminguide/networking_and_traffic.html#reserving-public-ip-addresses-and-vlans-for-accounts',
       permission: ['listPublicIpAddresses'],
+      searchFilters: ['ipaddress', 'zoneid', 'account', 'domainid', 'vlanid', 
'tags'],
       resourceType: 'PublicIpAddress',
       columns: () => {
         var fields = ['ipaddress', 'state', 'associatednetworkname', 
'vpcname', 'virtualmachinename', 'allocated', 'account']
@@ -921,7 +922,6 @@ export default {
       name: 's2svpn',
       title: 'label.site.to.site.vpn',
       icon: 'lock-outlined',
-      hidden: true,
       permission: ['listVpnGateways'],
       columns: ['publicip', 'account', 'domain'],
       details: ['publicip', 'account', 'domain'],
diff --git a/ui/src/config/section/offering.js 
b/ui/src/config/section/offering.js
index 3e99f602d91..b97b1a0cb2c 100644
--- a/ui/src/config/section/offering.js
+++ b/ui/src/config/section/offering.js
@@ -29,6 +29,7 @@ export default {
       docHelp: 
'adminguide/service_offerings.html#compute-and-disk-service-offerings',
       icon: 'cloud-outlined',
       permission: ['listServiceOfferings'],
+      searchFilters: ['name', 'zoneid', 'domainid', 'cpunumber', 'cpuspeed', 
'memory'],
       params: () => {
         var params = {}
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
@@ -132,6 +133,7 @@ export default {
       icon: 'setting-outlined',
       docHelp: 'adminguide/service_offerings.html#system-service-offerings',
       permission: ['listServiceOfferings', 'listInfrastructure'],
+      searchFilters: ['name', 'zoneid', 'domainid', 'cpunumber', 'cpuspeed', 
'memory'],
       params: { issystem: 'true', isrecursive: 'true' },
       columns: ['name', 'state', 'systemvmtype', 'cpunumber', 'cpuspeed', 
'memory', 'storagetype', 'order'],
       filters: ['active', 'inactive'],
@@ -208,6 +210,7 @@ export default {
       icon: 'hdd-outlined',
       docHelp: 
'adminguide/service_offerings.html#compute-and-disk-service-offerings',
       permission: ['listDiskOfferings'],
+      searchFilters: ['name', 'zoneid', 'domainid', 'storageid'],
       params: () => {
         var params = {}
         if (['Admin', 
'DomainAdmin'].includes(store.getters.userInfo.roletype)) {
@@ -307,6 +310,7 @@ export default {
       icon: 'cloud-upload-outlined',
       docHelp: 'adminguide/virtual_machines.html#backup-offerings',
       permission: ['listBackupOfferings'],
+      searchFilters: ['zoneid'],
       columns: ['name', 'description', 'zonename'],
       details: ['name', 'id', 'description', 'externalid', 'zone', 
'allowuserdrivenbackups', 'created'],
       related: [{
@@ -360,6 +364,7 @@ export default {
       icon: 'wifi-outlined',
       docHelp: 'adminguide/networking.html#network-offerings',
       permission: ['listNetworkOfferings'],
+      searchFilters: ['name', 'zoneid', 'domainid', 'tags'],
       columns: ['name', 'state', 'guestiptype', 'traffictype', 'networkrate', 
'domain', 'zone', 'order'],
       details: ['name', 'id', 'displaytext', 'guestiptype', 'traffictype', 
'internetprotocol', 'networkrate', 'ispersistent', 'egressdefaultpolicy', 
'availability', 'conservemode', 'specifyvlan', 'specifyipranges', 
'supportspublicaccess', 'supportsstrechedl2subnet', 'service', 'tags', 
'domain', 'zone'],
       resourceType: 'NetworkOffering',
@@ -458,6 +463,7 @@ export default {
       icon: 'deployment-unit-outlined',
       docHelp: 'plugins/nuage-plugin.html?#vpc-offerings',
       permission: ['listVPCOfferings'],
+      searchFilters: ['name', 'zoneid', 'domainid'],
       resourceType: 'VpcOffering',
       columns: ['name', 'state', 'displaytext', 'domain', 'zone', 'order'],
       details: ['name', 'id', 'displaytext', 'internetprotocol', 
'distributedvpcrouter', 'tags', 'service', 'domain', 'zone', 'created'],
diff --git a/ui/src/config/section/role.js b/ui/src/config/section/role.js
index 3823d633b18..c842b2f68f1 100644
--- a/ui/src/config/section/role.js
+++ b/ui/src/config/section/role.js
@@ -24,6 +24,7 @@ export default {
   icon: 'idcard-outlined',
   docHelp: 'adminguide/accounts.html#roles',
   permission: ['listRoles', 'listRolePermissions'],
+  searchFilters: ['name', 'type'],
   columns: ['name', 'type', 'description'],
   details: ['name', 'id', 'type', 'description', 'ispublic'],
   tabs: [{

Reply via email to