bug 8257: ListVM's API - adding the functionality to invoke this api with the hypervisor filter.

status 8257: resolved fixed
This commit is contained in:
nit 2011-02-01 18:00:39 +05:30
parent e74d8888c7
commit 98cb458bf1
3 changed files with 31 additions and 2 deletions

12
api/src/com/cloud/api/commands/ListVMsCmd.java Normal file → Executable file
View File

@ -26,6 +26,7 @@ import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.UserVmResponse;
import com.cloud.async.AsyncJob;
@ -77,6 +78,9 @@ public class ListVMsCmd extends BaseListCmd {
@Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id")
private Long networkId;
@Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the target hypervisor for the template")
private String hypervisor;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@ -132,6 +136,10 @@ public class ListVMsCmd extends BaseListCmd {
public Boolean isRecursive() {
return recursive;
}
public String getHypervisor() {
return hypervisor;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -143,8 +151,8 @@ public class ListVMsCmd extends BaseListCmd {
public AsyncJob.Type getInstanceType() {
return AsyncJob.Type.VirtualMachine;
}
@Override
@Override
public void execute(){
List<? extends UserVm> result = _userVmService.searchForUserVMs(this);
ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();

1
server/src/com/cloud/server/Criteria.java Normal file → Executable file
View File

@ -79,6 +79,7 @@ public class Criteria {
public static final String GROUP = "group";
public static final String EMPTY_GROUP = "emptyGroup";
public static final String NETWORKID = "networkId";
public static final String HYPERVISOR = "hypervisor";
public Criteria(String orderBy, Boolean ascending, Long offset, Long limit) {
this.offset = offset;

View File

@ -107,6 +107,7 @@ import com.cloud.ha.HighAvailabilityManager;
import com.cloud.host.HostVO;
import com.cloud.host.dao.DetailsDao;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.IPAddressVO;
import com.cloud.network.Network;
@ -2385,6 +2386,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
String accountName = cmd.getAccountName();
Long accountId = null;
Boolean isRecursive = cmd.isRecursive();
String hypervisor = cmd.getHypervisor();
List<DomainVO> domainsToSearchForVms = new ArrayList<DomainVO>();
boolean isAdmin = false;
String path = null;
@ -2444,6 +2446,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
if (path != null) {
c.addCriteria(Criteria.PATH, path);
}
if (HypervisorType.getType(hypervisor) != HypervisorType.None){
c.addCriteria(Criteria.HYPERVISOR, hypervisor);
}else if (hypervisor != null){
throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor);
}
// ignore these search requests if it's not an admin
if (isAdmin == true) {
@ -2463,6 +2471,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
private List<UserVmVO> recursivelySearchForVms(ListVMsCmd cmd, String path, boolean isAdmin, List<DomainVO> domainToSearchWithin, Long accountId) {
List<UserVmVO> result = new ArrayList<UserVmVO>();
String hypervisor = cmd.getHypervisor();
for(DomainVO domain : domainToSearchWithin) {
Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal());
@ -2486,6 +2495,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
c.addCriteria(Criteria.HOSTID, cmd.getHostId());
}
if (HypervisorType.getType(hypervisor) != HypervisorType.None){
c.addCriteria(Criteria.HYPERVISOR, hypervisor);
}else if (hypervisor != null){
throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor);
}
if (accountId != null) {
c.addCriteria(Criteria.ACCOUNTID, new Object[] {accountId});
}
@ -2522,6 +2537,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
Object useVirtualNetwork = c.getCriteria(Criteria.FOR_VIRTUAL_NETWORK);
Object path = c.getCriteria(Criteria.PATH);
Object networkId = c.getCriteria(Criteria.NETWORKID);
Object hypervisor = c.getCriteria(Criteria.HYPERVISOR);
sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
@ -2533,6 +2549,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN);
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ);
sb.and("hostIdIN", sb.entity().getHostId(), SearchCriteria.Op.IN);
@ -2636,6 +2653,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
}
}
if (hypervisor != null){
sc.setParameters("hypervisorType", hypervisor);
}
if ((isAdmin != null) && ((Boolean) isAdmin != true)) {
sc.setParameters("stateNIN", "Destroyed", "Expunging");
}