Skip to content

Commit 7a25e40

Browse files
authored
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
1 parent 1c130a5 commit 7a25e40

3 files changed

Lines changed: 38 additions & 17 deletions

File tree

api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.cloudstack.api.BaseCmd;
2323
import org.apache.cloudstack.api.BaseListCmd;
2424
import org.apache.cloudstack.api.Parameter;
25-
import org.apache.cloudstack.api.response.HostResponse;
2625
import org.apache.cloudstack.api.response.ListResponse;
2726
import org.apache.cloudstack.api.response.ManagementServerResponse;
2827
import org.apache.log4j.Logger;
@@ -38,7 +37,7 @@ public class ListMgmtsCmd extends BaseListCmd {
3837
//////////////// API parameters /////////////////////
3938
/////////////////////////////////////////////////////
4039

41-
@Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = HostResponse.class, description = "the id of the management server")
40+
@Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = ManagementServerResponse.class, description = "the id of the management server")
4241
private Long id;
4342

4443
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "the name of the management server")

api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616
// under the License.
1717
package org.apache.cloudstack.management;
1818

19-
public interface ManagementServerHost {
19+
import org.apache.cloudstack.api.Identity;
20+
import org.apache.cloudstack.api.InternalIdentity;
21+
22+
public interface ManagementServerHost extends InternalIdentity, Identity {
2023
enum State {
2124
Up, Down
2225
}
2326

24-
long getId();
25-
26-
String getUuid();
27-
2827
long getMsid();
2928

3029
State getState();

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3832,20 +3832,43 @@ protected ResourceDetailResponse createResourceDetailsResponse(ResourceDetail re
38323832
@Override
38333833
public ListResponse<ManagementServerResponse> listManagementServers(ListMgmtsCmd cmd) {
38343834
ListResponse<ManagementServerResponse> response = new ListResponse<>();
3835-
List<ManagementServerResponse> result = new ArrayList<>();
3836-
for (ManagementServerHostVO mgmt : managementServerHostDao.listAll()) {
3837-
ManagementServerResponse mgmtResponse = new ManagementServerResponse();
3838-
mgmtResponse.setId(mgmt.getUuid());
3839-
mgmtResponse.setName(mgmt.getName());
3840-
mgmtResponse.setState(mgmt.getState());
3841-
mgmtResponse.setVersion(mgmt.getVersion());
3842-
mgmtResponse.setObjectName("managementserver");
3843-
result.add(mgmtResponse);
3835+
Pair<List<ManagementServerHostVO>, Integer> result = listManagementServersInternal(cmd);
3836+
List<ManagementServerResponse> hostResponses = new ArrayList<>();
3837+
3838+
for (ManagementServerHostVO host : result.first()) {
3839+
ManagementServerResponse hostResponse = createManagementServerResponse(host);
3840+
hostResponses.add(hostResponse);
38443841
}
3845-
response.setResponses(result);
3842+
3843+
response.setResponses(hostResponses);
38463844
return response;
38473845
}
38483846

3847+
protected Pair<List<ManagementServerHostVO>, Integer> listManagementServersInternal(ListMgmtsCmd cmd) {
3848+
Long id = cmd.getId();
3849+
String name = cmd.getHostName();
3850+
3851+
SearchBuilder<ManagementServerHostVO> sb = managementServerHostDao.createSearchBuilder();
3852+
SearchCriteria<ManagementServerHostVO> sc = sb.create();
3853+
if (id != null) {
3854+
sc.addAnd("id", SearchCriteria.Op.EQ, id);
3855+
}
3856+
if (name != null) {
3857+
sc.addAnd("name", SearchCriteria.Op.EQ, name);
3858+
}
3859+
return managementServerHostDao.searchAndCount(sc, null);
3860+
}
3861+
3862+
protected ManagementServerResponse createManagementServerResponse(ManagementServerHostVO mgmt) {
3863+
ManagementServerResponse mgmtResponse = new ManagementServerResponse();
3864+
mgmtResponse.setId(mgmt.getUuid());
3865+
mgmtResponse.setName(mgmt.getName());
3866+
mgmtResponse.setState(mgmt.getState());
3867+
mgmtResponse.setVersion(mgmt.getVersion());
3868+
mgmtResponse.setObjectName("managementserver");
3869+
return mgmtResponse;
3870+
}
3871+
38493872
@Override
38503873
public ListResponse<TemplateOVFPropertyResponse> listTemplateOVFProperties(ListTemplateOVFProperties cmd) {
38513874
ListResponse<TemplateOVFPropertyResponse> response = new ListResponse<>();

0 commit comments

Comments
 (0)