mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	ui: Add filtering by state in account, systemvms, router and storagepool (#7368)
This PR allows admin to filter resources by state for systemvms, router & storagepool. This is part of #7366 . Co-authored-by: Abhishek Kumar <abhishek.mrt22@gmail.com> Co-authored-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
		
							parent
							
								
									fcbcddbcb9
								
							
						
					
					
						commit
						79eae89a87
					
				| @ -18,6 +18,21 @@ | ||||
|  */ | ||||
| package com.cloud.storage; | ||||
| 
 | ||||
| import com.cloud.exception.InvalidParameterValueException; | ||||
| import org.apache.commons.lang3.EnumUtils; | ||||
| 
 | ||||
| public enum ScopeType { | ||||
|     HOST, CLUSTER, ZONE, REGION, GLOBAL; | ||||
| 
 | ||||
|     public static ScopeType validateAndGetScopeType(String value) { | ||||
|         if (value == null) { | ||||
|             return null; | ||||
|         } else { | ||||
|             ScopeType scopeType = EnumUtils.getEnumIgnoreCase(ScopeType.class, value); | ||||
|             if (scopeType == null) { | ||||
|                 throw new InvalidParameterValueException("Invalid scope type: " + value); | ||||
|             } | ||||
|             return scopeType; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -16,6 +16,21 @@ | ||||
| // under the License. | ||||
| package com.cloud.storage; | ||||
| 
 | ||||
| import com.cloud.exception.InvalidParameterValueException; | ||||
| import org.apache.commons.lang3.EnumUtils; | ||||
| 
 | ||||
| public enum StoragePoolStatus { | ||||
|     Initial, Initialized, Creating, Attaching, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Disabled, Removed; | ||||
| 
 | ||||
|     public static StoragePoolStatus validateAndGetStatus(String value) { | ||||
|         if (value == null) { | ||||
|             return null; | ||||
|         } else { | ||||
|             StoragePoolStatus status = EnumUtils.getEnumIgnoreCase(StoragePoolStatus.class, value); | ||||
|             if (status == null) { | ||||
|                 throw new InvalidParameterValueException("Invalid status: " + value); | ||||
|             } | ||||
|             return status; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -66,6 +66,9 @@ public class ListStoragePoolsCmd extends BaseListCmd { | ||||
|     @Parameter(name = ApiConstants.SCOPE, type = CommandType.STRING, entityType = StoragePoolResponse.class, description = "the ID of the storage pool") | ||||
|     private String scope; | ||||
| 
 | ||||
|     @Parameter(name = ApiConstants.STATUS, type = CommandType.STRING, description = "the status of the storage pool") | ||||
|     private String status; | ||||
| 
 | ||||
|     ///////////////////////////////////////////////////// | ||||
|     /////////////////// Accessors /////////////////////// | ||||
|     ///////////////////////////////////////////////////// | ||||
| @ -94,6 +97,10 @@ public class ListStoragePoolsCmd extends BaseListCmd { | ||||
|         return zoneId; | ||||
|     } | ||||
| 
 | ||||
|     public String getStatus() { | ||||
|         return status; | ||||
|     } | ||||
| 
 | ||||
|     public Long getId() { | ||||
|         return id; | ||||
|     } | ||||
| @ -101,7 +108,7 @@ public class ListStoragePoolsCmd extends BaseListCmd { | ||||
|     public void setId(Long id) { | ||||
|         this.id = id; | ||||
|     } | ||||
| ///////////////////////////////////////////////////// | ||||
|     ///////////////////////////////////////////////////// | ||||
|     /////////////// API Implementation/////////////////// | ||||
|     ///////////////////////////////////////////////////// | ||||
| 
 | ||||
|  | ||||
| @ -229,6 +229,7 @@ import com.cloud.storage.ScopeType; | ||||
| import com.cloud.storage.Storage; | ||||
| import com.cloud.storage.Storage.ImageFormat; | ||||
| import com.cloud.storage.Storage.TemplateType; | ||||
| import com.cloud.storage.StoragePoolStatus; | ||||
| import com.cloud.storage.StoragePoolTagVO; | ||||
| import com.cloud.storage.VMTemplateVO; | ||||
| import com.cloud.storage.Volume; | ||||
| @ -2603,89 +2604,26 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q | ||||
|     } | ||||
| 
 | ||||
|     private Pair<List<StoragePoolJoinVO>, Integer> searchForStoragePoolsInternal(ListStoragePoolsCmd cmd) { | ||||
|         ScopeType scopeType = null; | ||||
|         if (cmd.getScope() != null) { | ||||
|             try { | ||||
|                 scopeType = Enum.valueOf(ScopeType.class, cmd.getScope().toUpperCase()); | ||||
|             } catch (Exception e) { | ||||
|                 throw new InvalidParameterValueException("Invalid scope type: " + cmd.getScope()); | ||||
|             } | ||||
|         } | ||||
|         ScopeType scopeType = ScopeType.validateAndGetScopeType(cmd.getScope()); | ||||
|         StoragePoolStatus status = StoragePoolStatus.validateAndGetStatus(cmd.getStatus()); | ||||
| 
 | ||||
|         Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId()); | ||||
|         Object id = cmd.getId(); | ||||
|         Object name = cmd.getStoragePoolName(); | ||||
|         Object path = cmd.getPath(); | ||||
|         Object pod = cmd.getPodId(); | ||||
|         Object cluster = cmd.getClusterId(); | ||||
|         Object address = cmd.getIpAddress(); | ||||
|         Object keyword = cmd.getKeyword(); | ||||
|         Long id = cmd.getId(); | ||||
|         String name = cmd.getStoragePoolName(); | ||||
|         String path = cmd.getPath(); | ||||
|         Long pod = cmd.getPodId(); | ||||
|         Long cluster = cmd.getClusterId(); | ||||
|         String address = cmd.getIpAddress(); | ||||
|         String keyword = cmd.getKeyword(); | ||||
|         Long startIndex = cmd.getStartIndex(); | ||||
|         Long pageSize = cmd.getPageSizeVal(); | ||||
| 
 | ||||
|         Filter searchFilter = new Filter(StoragePoolJoinVO.class, "id", Boolean.TRUE, startIndex, pageSize); | ||||
| 
 | ||||
|         SearchBuilder<StoragePoolJoinVO> sb = _poolJoinDao.createSearchBuilder(); | ||||
|         sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct | ||||
|         // ids | ||||
|         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ); | ||||
|         sb.and("path", sb.entity().getPath(), SearchCriteria.Op.EQ); | ||||
|         sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("hostAddress", sb.entity().getHostAddress(), SearchCriteria.Op.EQ); | ||||
|         sb.and("scope", sb.entity().getScope(), SearchCriteria.Op.EQ); | ||||
|         sb.and("parent", sb.entity().getParent(), Op.EQ); | ||||
|         // search & count Pool details by ids | ||||
|         Pair<List<StoragePoolJoinVO>, Integer> uniquePoolPair = _poolJoinDao.searchAndCount(id, name, zoneId, path, pod, | ||||
|                 cluster, address, scopeType, status, keyword, searchFilter); | ||||
| 
 | ||||
|         SearchCriteria<StoragePoolJoinVO> sc = sb.create(); | ||||
| 
 | ||||
|         if (keyword != null) { | ||||
|             SearchCriteria<StoragePoolJoinVO> ssc = _poolJoinDao.createSearchCriteria(); | ||||
|             ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); | ||||
|             ssc.addOr("poolType", SearchCriteria.Op.LIKE, "%" + keyword + "%"); | ||||
| 
 | ||||
|             sc.addAnd("name", SearchCriteria.Op.SC, ssc); | ||||
|         } | ||||
| 
 | ||||
|         if (id != null) { | ||||
|             sc.setParameters("id", id); | ||||
|         } | ||||
| 
 | ||||
|         if (name != null) { | ||||
|             sc.setParameters("name", name); | ||||
|         } | ||||
| 
 | ||||
|         if (path != null) { | ||||
|             sc.setParameters("path", path); | ||||
|         } | ||||
|         if (zoneId != null) { | ||||
|             sc.setParameters("dataCenterId", zoneId); | ||||
|         } | ||||
|         if (pod != null) { | ||||
|             SearchCriteria<StoragePoolJoinVO> ssc = _poolJoinDao.createSearchCriteria(); | ||||
|             ssc.addOr("podId", Op.EQ, pod); | ||||
|             ssc.addOr("podId", Op.NULL); | ||||
| 
 | ||||
|             sc.addAnd("podId", SearchCriteria.Op.SC, ssc); | ||||
|         } | ||||
|         if (address != null) { | ||||
|             sc.setParameters("hostAddress", address); | ||||
|         } | ||||
|         if (cluster != null) { | ||||
|             SearchCriteria<StoragePoolJoinVO> ssc = _poolJoinDao.createSearchCriteria(); | ||||
|             ssc.addOr("clusterId", Op.EQ, cluster); | ||||
|             ssc.addOr("clusterId", Op.NULL); | ||||
| 
 | ||||
|             sc.addAnd("clusterId", SearchCriteria.Op.SC, ssc); | ||||
|         } | ||||
|         if (scopeType != null) { | ||||
|             sc.setParameters("scope", scopeType.toString()); | ||||
|         } | ||||
|         sc.setParameters("parent", 0); | ||||
| 
 | ||||
|         // search Pool details by ids | ||||
|         Pair<List<StoragePoolJoinVO>, Integer> uniquePoolPair = _poolJoinDao.searchAndCount(sc, searchFilter); | ||||
|         Integer count = uniquePoolPair.second(); | ||||
|         if (count.intValue() == 0) { | ||||
|             // empty result | ||||
|  | ||||
| @ -18,6 +18,10 @@ package com.cloud.api.query.dao; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import com.cloud.storage.ScopeType; | ||||
| import com.cloud.storage.StoragePoolStatus; | ||||
| import com.cloud.utils.Pair; | ||||
| import com.cloud.utils.db.Filter; | ||||
| import org.apache.cloudstack.api.response.StoragePoolResponse; | ||||
| 
 | ||||
| import com.cloud.api.query.vo.StoragePoolJoinVO; | ||||
| @ -38,4 +42,6 @@ public interface StoragePoolJoinDao extends GenericDao<StoragePoolJoinVO, Long> | ||||
| 
 | ||||
|     List<StoragePoolJoinVO> searchByIds(Long... spIds); | ||||
| 
 | ||||
|     Pair<List<StoragePoolJoinVO>, Integer> searchAndCount(Long storagePoolId, String storagePoolName, Long zoneId, String path, Long podId, Long clusterId, String address, ScopeType scopeType, StoragePoolStatus status, String keyword, Filter searchFilter); | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -20,11 +20,15 @@ import com.cloud.api.ApiDBUtils; | ||||
| import com.cloud.api.query.vo.StoragePoolJoinVO; | ||||
| import com.cloud.capacity.CapacityManager; | ||||
| import com.cloud.storage.DataStoreRole; | ||||
| import com.cloud.storage.ScopeType; | ||||
| import com.cloud.storage.Storage; | ||||
| import com.cloud.storage.StoragePool; | ||||
| import com.cloud.storage.StoragePoolStatus; | ||||
| import com.cloud.storage.StorageStats; | ||||
| import com.cloud.user.AccountManager; | ||||
| import com.cloud.utils.Pair; | ||||
| import com.cloud.utils.StringUtils; | ||||
| import com.cloud.utils.db.Filter; | ||||
| import com.cloud.utils.db.GenericDaoBase; | ||||
| import com.cloud.utils.db.SearchBuilder; | ||||
| import com.cloud.utils.db.SearchCriteria; | ||||
| @ -291,4 +295,75 @@ public class StoragePoolJoinDaoImpl extends GenericDaoBase<StoragePoolJoinVO, Lo | ||||
|         return uvList; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Pair<List<StoragePoolJoinVO>, Integer> searchAndCount(Long storagePoolId, String storagePoolName, Long zoneId, String path, Long podId, Long clusterId, String address, ScopeType scopeType, StoragePoolStatus status, String keyword, Filter searchFilter) { | ||||
|         SearchCriteria<StoragePoolJoinVO> sc = createStoragePoolSearchCriteria(storagePoolId, storagePoolName, zoneId, path, podId, clusterId, address, scopeType, status, keyword); | ||||
|         return searchAndCount(sc, searchFilter); | ||||
|     } | ||||
| 
 | ||||
|     private SearchCriteria<StoragePoolJoinVO> createStoragePoolSearchCriteria(Long storagePoolId, String storagePoolName, Long zoneId, String path, Long podId, Long clusterId, String address, ScopeType scopeType, StoragePoolStatus status, String keyword) { | ||||
|         SearchBuilder<StoragePoolJoinVO> sb = createSearchBuilder(); | ||||
|         sb.select(null, SearchCriteria.Func.DISTINCT, sb.entity().getId()); // select distinct | ||||
|         // ids | ||||
|         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ); | ||||
|         sb.and("path", sb.entity().getPath(), SearchCriteria.Op.EQ); | ||||
|         sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); | ||||
|         sb.and("hostAddress", sb.entity().getHostAddress(), SearchCriteria.Op.EQ); | ||||
|         sb.and("scope", sb.entity().getScope(), SearchCriteria.Op.EQ); | ||||
|         sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ); | ||||
|         sb.and("parent", sb.entity().getParent(), SearchCriteria.Op.EQ); | ||||
| 
 | ||||
|         SearchCriteria<StoragePoolJoinVO> sc = sb.create(); | ||||
| 
 | ||||
|         if (keyword != null) { | ||||
|             SearchCriteria<StoragePoolJoinVO> ssc = createSearchCriteria(); | ||||
|             ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); | ||||
|             ssc.addOr("poolType", SearchCriteria.Op.LIKE, "%" + keyword + "%"); | ||||
| 
 | ||||
|             sc.addAnd("name", SearchCriteria.Op.SC, ssc); | ||||
|         } | ||||
| 
 | ||||
|         if (storagePoolId != null) { | ||||
|             sc.setParameters("id", storagePoolId); | ||||
|         } | ||||
| 
 | ||||
|         if (storagePoolName != null) { | ||||
|             sc.setParameters("name", storagePoolName); | ||||
|         } | ||||
| 
 | ||||
|         if (path != null) { | ||||
|             sc.setParameters("path", path); | ||||
|         } | ||||
|         if (zoneId != null) { | ||||
|             sc.setParameters("dataCenterId", zoneId); | ||||
|         } | ||||
|         if (podId != null) { | ||||
|             SearchCriteria<StoragePoolJoinVO> ssc = createSearchCriteria(); | ||||
|             ssc.addOr("podId", SearchCriteria.Op.EQ, podId); | ||||
|             ssc.addOr("podId", SearchCriteria.Op.NULL); | ||||
| 
 | ||||
|             sc.addAnd("podId", SearchCriteria.Op.SC, ssc); | ||||
|         } | ||||
|         if (address != null) { | ||||
|             sc.setParameters("hostAddress", address); | ||||
|         } | ||||
|         if (clusterId != null) { | ||||
|             SearchCriteria<StoragePoolJoinVO> ssc = createSearchCriteria(); | ||||
|             ssc.addOr("clusterId", SearchCriteria.Op.EQ, clusterId); | ||||
|             ssc.addOr("clusterId", SearchCriteria.Op.NULL); | ||||
| 
 | ||||
|             sc.addAnd("clusterId", SearchCriteria.Op.SC, ssc); | ||||
|         } | ||||
|         if (scopeType != null) { | ||||
|             sc.setParameters("scope", scopeType.toString()); | ||||
|         } | ||||
|         if (status != null) { | ||||
|             sc.setParameters("status", status.toString()); | ||||
|         } | ||||
|         sc.setParameters("parent", 0); | ||||
|         return sc; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -340,9 +340,9 @@ | ||||
| "label.associatednetworkid": "Associated network ID", | ||||
| "label.associatednetworkname": "Network name", | ||||
| "label.asyncbackup": "Async backup", | ||||
| "label.attaching": "Attaching", | ||||
| "label.authentication.method": "Authentication Method", | ||||
| "label.authentication.sshkey": "System SSH Key", | ||||
| "label.automigrate.volume": "Auto migrate volume to another storage pool if required", | ||||
| "label.autoscale": "AutoScale", | ||||
| "label.autoscalevmgroupname": "AutoScale VM Group", | ||||
| "label.author.email": "Author e-mail", | ||||
| @ -402,6 +402,7 @@ | ||||
| "label.bypassvlanoverlapcheck": "Bypass VLAN id/range overlap", | ||||
| "label.cachemode": "Write-cache type", | ||||
| "label.cancel": "Cancel", | ||||
| "label.cancelmaintenance": "Cancel maintenance", | ||||
| "label.capacity": "Capacity", | ||||
| "label.capacitybytes": "Capacity bytes", | ||||
| "label.capacityiops": "IOPS total", | ||||
| @ -545,6 +546,7 @@ | ||||
| "label.create.user": "Create user", | ||||
| "label.create.vpn.connection": "Create VPN connection", | ||||
| "label.created": "Created", | ||||
| "label.creating": "Creating", | ||||
| "label.creating.iprange": "Creating IP ranges", | ||||
| "label.credit": "Credit", | ||||
| "label.crosszones": "Cross zones", | ||||
| @ -653,6 +655,7 @@ | ||||
| "label.destnetworkuuid": "Network", | ||||
| "label.destport": "Destination Ports", | ||||
| "label.destroy": "Destroy", | ||||
| "label.destroyed": "Destroyed", | ||||
| "label.destroy.router": "Destroy router", | ||||
| "label.deststartport": "Destination Start Port", | ||||
| "label.desttaguuid": "Destination Tag", | ||||
| @ -771,6 +774,7 @@ | ||||
| "label.enable.storage": "Enable storage pool", | ||||
| "label.enable.vpc.offering": "Enable VPC offering", | ||||
| "label.enable.vpn": "Enable remote access VPN", | ||||
| "label.enabled": "Enabled", | ||||
| "label.encrypt": "Encrypt", | ||||
| "label.encryptroot": "Encrypt Root Disk", | ||||
| "label.end": "End", | ||||
| @ -798,6 +802,7 @@ | ||||
| "label.error.setting": "Error setting", | ||||
| "label.error.something.went.wrong.please.correct.the.following": "Something went wrong; please correct the following", | ||||
| "label.error.upper": "ERROR", | ||||
| "label.errorinmaintenance": "Error in maintenance", | ||||
| "label.espencryption": "ESP encryption", | ||||
| "label.esphash": "ESP hash", | ||||
| "label.esplifetime": "ESP lifetime (second)", | ||||
| @ -957,6 +962,8 @@ | ||||
| "label.infrastructure": "Infrastructure", | ||||
| "label.ingress": "Ingress", | ||||
| "label.ingress.rule": "Ingress Rule", | ||||
| "label.initial": "Inital", | ||||
| "label.initialized": "Initalized", | ||||
| "label.insideportprofile": "Inside port profile", | ||||
| "label.installwizard.addzoneintro.title": "Let's add a zone", | ||||
| "label.installwizard.subtitle": "This guide will aid you in setting up your CloudStack™ installation", | ||||
| @ -1147,6 +1154,7 @@ | ||||
| "label.local.storage.enabled.system.vms": "Enable local storage for system VMs", | ||||
| "label.localstorageenabled": "Enable local storage for user VMs", | ||||
| "label.localstorageenabledforsystemvm": "Enable local storage for system VMs", | ||||
| "label.locked": "Locked", | ||||
| "label.login": "Login", | ||||
| "label.loginfo": "Log file information", | ||||
| "label.login.portal": "Portal login", | ||||
| @ -1446,6 +1454,7 @@ | ||||
| "label.preferred": "Preferred", | ||||
| "label.prefix": "Prefix", | ||||
| "label.prefix.type": "Prefix type", | ||||
| "label.prepareformaintenance": "Prepare for Maintenance", | ||||
| "label.presetup": "PreSetup", | ||||
| "label.prev": "Prev", | ||||
| "label.previous": "Previous", | ||||
| @ -1591,6 +1600,7 @@ | ||||
| "label.remove.vmware.datacenter": "Remove VMware Datacenter", | ||||
| "label.remove.vpc": "Remove VPC", | ||||
| "label.remove.vpc.offering": "Remove VPC offering", | ||||
| "label.removed": "Removed", | ||||
| "label.removing": "Removing", | ||||
| "label.replace.acl": "Replace ACL", | ||||
| "label.replace.acl.list": "Replace ACL list", | ||||
| @ -1658,7 +1668,8 @@ | ||||
| "label.rules.file.import.description": "Click or drag rule definitions CSV file to import.", | ||||
| "label.rules.file.to.import": "Rule definitions CSV file to import", | ||||
| "label.run.proxy.locally": "Run proxy locally", | ||||
| "label.running": "Running VMs", | ||||
| "label.running": "Running", | ||||
| "label.running.vms": "Running VMs", | ||||
| "label.s2scustomergatewayid": "Site to site customer gateway ID", | ||||
| "label.s2svpngatewayid": "Site to site VPN gateway ID", | ||||
| "label.s3.access.key": "Access key", | ||||
| @ -1754,6 +1765,7 @@ | ||||
| "label.sharewith": "Share with", | ||||
| "label.showing": "Showing", | ||||
| "label.shrinkok": "Shrink OK", | ||||
| "label.shutdown": "Shutdown", | ||||
| "label.shutdown.provider": "Shutdown provider", | ||||
| "label.simplified.chinese.keyboard": "Simplified Chinese keyboard", | ||||
| "label.site.to.site.vpn": "Site-to-site VPN", | ||||
| @ -1822,6 +1834,7 @@ | ||||
| "label.start.rolling.maintenance": "Start rolling maintenance", | ||||
| "label.start.vm": "Start VM", | ||||
| "label.startdate": "By date (start)", | ||||
| "label.starting": "Starting", | ||||
| "label.startip": "Start IP", | ||||
| "label.startipv4": "IPv4 start IP", | ||||
| "label.startipv6": "IPv6 start IP", | ||||
| @ -1849,7 +1862,9 @@ | ||||
| "label.sticky.request-learn": "Request learn", | ||||
| "label.sticky.tablesize": "Table size", | ||||
| "label.stop": "Stop", | ||||
| "label.stopped": "Stopped VMs", | ||||
| "label.stopped": "Stopped", | ||||
| "label.stopped.vms": "Stopped VMs", | ||||
| "label.stopping": "Stopping", | ||||
| "label.storage": "Storage", | ||||
| "label.storage.migration.required": "Storage migration required", | ||||
| "label.storage.tags": "Storage tags", | ||||
|  | ||||
| @ -31,6 +31,10 @@ export default { | ||||
|     title: 'label.users', | ||||
|     param: 'account' | ||||
|   }], | ||||
|   filters: () => { | ||||
|     const filters = ['enabled', 'disabled', 'locked'] | ||||
|     return filters | ||||
|   }, | ||||
|   tabs: [ | ||||
|     { | ||||
|       name: 'details', | ||||
|  | ||||
| @ -41,6 +41,10 @@ export default { | ||||
|     param: 'storageid' | ||||
|   }], | ||||
|   resourceType: 'PrimaryStorage', | ||||
|   filters: () => { | ||||
|     const filters = ['initial', 'initialized', 'creating', 'attaching', 'up', 'prepareformaintenance', 'errorinmaintenance', 'cancelmaintenance', 'maintenance', 'disabled', 'removed'] | ||||
|     return filters | ||||
|   }, | ||||
|   tabs: [{ | ||||
|     name: 'details', | ||||
|     component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailsTab.vue'))) | ||||
|  | ||||
| @ -33,6 +33,10 @@ export default { | ||||
|   searchFilters: ['name', 'zoneid', 'podid', 'clusterid'], | ||||
|   details: ['name', 'id', 'version', 'softwareversion', 'requiresupgrade', 'guestnetworkname', 'vpcname', 'publicip', 'guestipaddress', 'linklocalip', 'serviceofferingname', 'networkdomain', 'isredundantrouter', 'redundantstate', 'hostname', 'account', 'zonename', 'created', 'hostcontrolstate'], | ||||
|   resourceType: 'VirtualRouter', | ||||
|   filters: () => { | ||||
|     const filters = ['starting', 'running', 'stopping', 'stopped', 'destroyed', 'expunging', 'migrating', 'error', 'unknown', 'shutdown'] | ||||
|     return filters | ||||
|   }, | ||||
|   tabs: [{ | ||||
|     name: 'details', | ||||
|     component: shallowRef(defineAsyncComponent(() => import('@/components/view/DetailsTab.vue'))) | ||||
|  | ||||
| @ -27,6 +27,10 @@ export default { | ||||
|   columns: ['name', 'state', 'agentstate', 'systemvmtype', 'publicip', 'privateip', 'linklocalip', 'hostname', 'zonename'], | ||||
|   details: ['name', 'id', 'agentstate', 'systemvmtype', 'publicip', 'privateip', 'linklocalip', 'gateway', 'hostname', 'zonename', 'created', 'activeviewersessions', 'isdynamicallyscalable', 'hostcontrolstate'], | ||||
|   resourceType: 'SystemVm', | ||||
|   filters: () => { | ||||
|     const filters = ['starting', 'running', 'stopping', 'stopped', 'destroyed', 'expunging', 'migrating', 'error', 'unknown', 'shutdown'] | ||||
|     return filters | ||||
|   }, | ||||
|   tabs: [ | ||||
|     { | ||||
|       name: 'details', | ||||
|  | ||||
| @ -55,9 +55,9 @@ | ||||
|                     :placeholder="$t('label.filterby')" | ||||
|                     :value="$route.query.filter || (projectView && $route.name === 'vm' || | ||||
|                       ['Admin', 'DomainAdmin'].includes($store.getters.userInfo.roletype) && | ||||
|                       ['vm', 'iso', 'template', 'pod', 'cluster', 'host'].includes($route.name) | ||||
|                       ['vm', 'iso', 'template', 'pod', 'cluster', 'host', 'systemvm', 'router', 'storagepool'].includes($route.name) | ||||
|                         ? 'all' : ['publicip'].includes($route.name) | ||||
|                         ? 'allocated' : ['guestnetwork', 'guestvlans'].includes($route.name) | ||||
|                         ? 'allocated' : ['account', 'guestnetwork', 'guestvlans'].includes($route.name) | ||||
|                         ? 'all' : ['volume'].includes($route.name) | ||||
|                         ? 'user' : 'self')" | ||||
|                     style="min-width: 120px; margin-left: 10px" | ||||
| @ -70,7 +70,8 @@ | ||||
|                     <template #suffixIcon><filter-outlined class="ant-select-suffix" /></template> | ||||
|                     <a-select-option | ||||
|                       v-if="['Admin', 'DomainAdmin'].includes($store.getters.userInfo.roletype) && | ||||
|                       ['vm', 'iso', 'template', 'pod', 'cluster', 'host'].includes($route.name)" | ||||
|                       ['vm', 'iso', 'template', 'pod', 'cluster', 'host', 'systemvm', 'router', 'storagepool'].includes($route.name) || | ||||
|                       ['account'].includes($route.name)" | ||||
|                       key="all" | ||||
|                       :label="$t('label.all')"> | ||||
|                       {{ $t('label.all') }} | ||||
| @ -1573,8 +1574,15 @@ export default { | ||||
|         } else { | ||||
|           query.networkfilter = filter | ||||
|         } | ||||
|       } else if (this.$route.name === 'publicip') { | ||||
|         query.state = filter | ||||
|       } else if (['account', 'publicip', 'systemvm', 'router'].includes(this.$route.name)) { | ||||
|         if (filter !== 'all') { | ||||
|           query.state = filter | ||||
|         } | ||||
|       } else if (this.$route.name === 'storagepool') { | ||||
|         if (filter === 'all') { | ||||
|           delete query.status | ||||
|         } else { | ||||
|           query.status = filter | ||||
|       } else if (['pod', 'cluster'].includes(this.$route.name)) { | ||||
|         if (filter === 'all') { | ||||
|           delete query.allocationstate | ||||
|  | ||||
| @ -175,7 +175,7 @@ export default { | ||||
|           count = json.listvirtualmachinesresponse.count | ||||
|         } | ||||
|         var tileColor = this.$config.theme['@dashboard-tile-runningvms-bg'] || '#dfe9cc' | ||||
|         this.stats.splice(0, 1, { name: this.$t('label.running'), count: count, icon: 'desktop-outlined', bgcolor: tileColor, path: '/vm', query: { state: 'running', filter: 'running' } }) | ||||
|         this.stats.splice(0, 1, { name: this.$t('label.running.vms'), count: count, icon: 'desktop-outlined', bgcolor: tileColor, path: '/vm', query: { state: 'running', filter: 'running' } }) | ||||
|       }) | ||||
|       api('listVirtualMachines', { state: 'Stopped', listall: true }).then(json => { | ||||
|         var count = 0 | ||||
| @ -183,7 +183,7 @@ export default { | ||||
|           count = json.listvirtualmachinesresponse.count | ||||
|         } | ||||
|         var tileColor = this.$config.theme['@dashboard-tile-stoppedvms-bg'] || '#edcbce' | ||||
|         this.stats.splice(1, 1, { name: this.$t('label.stopped'), count: count, icon: 'poweroff-outlined', bgcolor: tileColor, path: '/vm', query: { state: 'stopped', filter: 'stopped' } }) | ||||
|         this.stats.splice(1, 1, { name: this.$t('label.stopped.vms'), count: count, icon: 'poweroff-outlined', bgcolor: tileColor, path: '/vm', query: { state: 'stopped', filter: 'stopped' } }) | ||||
|       }) | ||||
|       api('listVirtualMachines', { listall: true }).then(json => { | ||||
|         var count = 0 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user