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
This commit is contained in:
davidjumani 2020-01-30 10:38:25 +05:30 committed by GitHub
parent 1c130a5dd4
commit 7a25e40d5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 17 deletions

View File

@ -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")

View File

@ -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();

View File

@ -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<>();