CLOUDSTACK-2120: mixed zone management - (1) extend listStoragePools API to to take in zonetype. (2) UI: populate Primary Storages list page with ones whose zonetype matches selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/48b82a6f Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/48b82a6f Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/48b82a6f Branch: refs/heads/ui-add-remove-nics Commit: 48b82a6f91d9ef762a2a301d408ba72bc50a922a Parents: 8f5d8d5 Author: Jessica Wang <jessicaw...@apache.org> Authored: Wed Apr 24 16:36:07 2013 -0700 Committer: Jessica Wang <jessicaw...@apache.org> Committed: Wed Apr 24 16:36:07 2013 -0700 ---------------------------------------------------------------------- .../command/admin/storage/ListStoragePoolsCmd.java | 7 +++ .../src/com/cloud/api/query/QueryManagerImpl.java | 5 ++ ui/scripts/system.js | 33 ++++++++------- 3 files changed, 29 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48b82a6f/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java index 02b9803..17adb18 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java @@ -60,6 +60,9 @@ public class ListStoragePoolsCmd extends BaseListCmd { description="the Zone ID for the storage pool") private Long zoneId; + @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to") + private String zoneType; + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = StoragePoolResponse.class, description="the ID of the storage pool") private Long id; @@ -92,6 +95,10 @@ public class ListStoragePoolsCmd extends BaseListCmd { return zoneId; } + public String getZoneType() { + return zoneType; + } + public Long getId() { return id; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48b82a6f/server/src/com/cloud/api/query/QueryManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index ea260c3..6690b24 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -1859,6 +1859,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { private Pair<List<StoragePoolJoinVO>, Integer> searchForStoragePoolsInternal(ListStoragePoolsCmd cmd) { Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); + String zoneType = cmd.getZoneType(); Object id = cmd.getId(); Object name = cmd.getStoragePoolName(); Object path = cmd.getPath(); @@ -1878,6 +1879,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("path", sb.entity().getPath(), SearchCriteria.Op.EQ); sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ); + sb.and("dataCenterType", sb.entity().getZoneType(), 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); @@ -1908,6 +1910,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { if (zoneId != null) { sc.setParameters("dataCenterId", zoneId); } + if (zoneType != null) { + sc.setParameters("dataCenterType", zoneType); + } if (pod != null) { sc.setParameters("podId", pod); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/48b82a6f/ui/scripts/system.js ---------------------------------------------------------------------- diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 50dd66d..8f07ee4 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -258,24 +258,15 @@ primaryStorageCount: function(data) { $.ajax({ url: createURL('listStoragePools'), - data: { - page: 1, - pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property. - }, + data: { + page: 1, + pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property. + }, success: function(json) { - dataFns.secondaryStorageCount($.extend(data, { + dataFns.secondaryStorageCount($.extend(data, { primaryStorageCount: json.liststoragepoolsresponse.count ? json.liststoragepoolsresponse.count : 0 - })); - - //comment the 4 lines above and uncomment the following 4 lines if listHosts API still responds slowly. - - /* - dataFns.systemVmCount($.extend(data, { - primaryStorageCount: json.liststoragepoolsresponse.count ? - json.liststoragepoolsresponse.count : 0 - })); - */ + })); } }); }, @@ -5585,9 +5576,19 @@ var searchByArgs = args.filterBy.search.value.length ? '&name=' + args.filterBy.search.value : ''; + var data = { + page: args.page, + pageSize: pageSize, + listAll: true + }; + if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type + $.extend(data, { + zonetype: args.context.zoneType + }); + } $.ajax({ url: createURL('listStoragePools' + searchByArgs), - data: { page: args.page, pageSize: pageSize, listAll: true }, + data: data, success: function (json) { args.response.success({ data: json.liststoragepoolsresponse.storagepool }); },