mirror of https://github.com/apache/cloudstack.git
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:
parent
e74d8888c7
commit
98cb458bf1
|
|
@ -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>();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue