This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.13
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.13 by this push:
     new 7a25e40  api: allow listing management server by id and name (#3840)
7a25e40 is described below

commit 7a25e40d5a89b4885836b52f08f93ad762703f01
Author: davidjumani <[email protected]>
AuthorDate: Thu Jan 30 10:38:25 2020 +0530

    api: allow listing management server by id and name (#3840)
    
    The List Management Server api returns a list of all the management servers 
but fails when trying to list by id or name. This ensures that it fetches the 
details as per the parameters passed.
    Fixes: #3833
---
 .../api/command/admin/management/ListMgmtsCmd.java |  3 +-
 .../management/ManagementServerHost.java           |  9 ++---
 .../java/com/cloud/api/query/QueryManagerImpl.java | 43 +++++++++++++++++-----
 3 files changed, 38 insertions(+), 17 deletions(-)

diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java
index 1be4919..c01019e 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java
@@ -22,7 +22,6 @@ import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.api.BaseListCmd;
 import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.response.HostResponse;
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.ManagementServerResponse;
 import org.apache.log4j.Logger;
@@ -38,7 +37,7 @@ public class ListMgmtsCmd extends BaseListCmd {
     //////////////// API parameters /////////////////////
     /////////////////////////////////////////////////////
 
-    @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = 
HostResponse.class, description = "the id of the management server")
+    @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = 
ManagementServerResponse.class, description = "the id of the management server")
     private Long id;
 
     @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, 
description = "the name of the management server")
diff --git 
a/api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java 
b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java
index 11e1cae..0159fb2 100644
--- 
a/api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java
+++ 
b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java
@@ -16,15 +16,14 @@
 // under the License.
 package org.apache.cloudstack.management;
 
-public interface ManagementServerHost {
+import org.apache.cloudstack.api.Identity;
+import org.apache.cloudstack.api.InternalIdentity;
+
+public interface ManagementServerHost extends InternalIdentity, Identity {
     enum State {
         Up, Down
     }
 
-    long getId();
-
-    String getUuid();
-
     long getMsid();
 
     State getState();
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java 
b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index 5515efe..9028565 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -3832,20 +3832,43 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     @Override
     public ListResponse<ManagementServerResponse> 
listManagementServers(ListMgmtsCmd cmd) {
         ListResponse<ManagementServerResponse> response = new ListResponse<>();
-        List<ManagementServerResponse> result = new ArrayList<>();
-        for (ManagementServerHostVO mgmt : managementServerHostDao.listAll()) {
-            ManagementServerResponse mgmtResponse = new 
ManagementServerResponse();
-            mgmtResponse.setId(mgmt.getUuid());
-            mgmtResponse.setName(mgmt.getName());
-            mgmtResponse.setState(mgmt.getState());
-            mgmtResponse.setVersion(mgmt.getVersion());
-            mgmtResponse.setObjectName("managementserver");
-            result.add(mgmtResponse);
+        Pair<List<ManagementServerHostVO>, Integer> result = 
listManagementServersInternal(cmd);
+        List<ManagementServerResponse> hostResponses = new ArrayList<>();
+
+        for (ManagementServerHostVO host : result.first()) {
+            ManagementServerResponse hostResponse = 
createManagementServerResponse(host);
+            hostResponses.add(hostResponse);
         }
-        response.setResponses(result);
+
+        response.setResponses(hostResponses);
         return response;
     }
 
+    protected Pair<List<ManagementServerHostVO>, Integer> 
listManagementServersInternal(ListMgmtsCmd cmd) {
+        Long id = cmd.getId();
+        String name = cmd.getHostName();
+
+        SearchBuilder<ManagementServerHostVO> sb = 
managementServerHostDao.createSearchBuilder();
+        SearchCriteria<ManagementServerHostVO> sc = sb.create();
+        if (id != null) {
+            sc.addAnd("id", SearchCriteria.Op.EQ, id);
+        }
+        if (name != null) {
+            sc.addAnd("name", SearchCriteria.Op.EQ, name);
+        }
+        return managementServerHostDao.searchAndCount(sc, null);
+    }
+
+    protected ManagementServerResponse 
createManagementServerResponse(ManagementServerHostVO mgmt) {
+        ManagementServerResponse mgmtResponse = new ManagementServerResponse();
+        mgmtResponse.setId(mgmt.getUuid());
+        mgmtResponse.setName(mgmt.getName());
+        mgmtResponse.setState(mgmt.getState());
+        mgmtResponse.setVersion(mgmt.getVersion());
+        mgmtResponse.setObjectName("managementserver");
+        return mgmtResponse;
+    }
+
     @Override
     public ListResponse<TemplateOVFPropertyResponse> 
listTemplateOVFProperties(ListTemplateOVFProperties cmd) {
         ListResponse<TemplateOVFPropertyResponse> response = new 
ListResponse<>();

Reply via email to