From 98cb458bf1c572475448e170d9e209857a173262 Mon Sep 17 00:00:00 2001 From: nit Date: Tue, 1 Feb 2011 18:00:39 +0530 Subject: [PATCH] bug 8257: ListVM's API - adding the functionality to invoke this api with the hypervisor filter. status 8257: resolved fixed --- .../com/cloud/api/commands/ListVMsCmd.java | 12 +++++++++-- server/src/com/cloud/server/Criteria.java | 1 + .../src/com/cloud/vm/UserVmManagerImpl.java | 20 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) mode change 100644 => 100755 api/src/com/cloud/api/commands/ListVMsCmd.java mode change 100644 => 100755 server/src/com/cloud/server/Criteria.java diff --git a/api/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/com/cloud/api/commands/ListVMsCmd.java old mode 100644 new mode 100755 index d90cf80128c..98ca80cedc9 --- a/api/src/com/cloud/api/commands/ListVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMsCmd.java @@ -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 result = _userVmService.searchForUserVMs(this); ListResponse response = new ListResponse(); diff --git a/server/src/com/cloud/server/Criteria.java b/server/src/com/cloud/server/Criteria.java old mode 100644 new mode 100755 index 74bc4e54b84..564c9997b37 --- a/server/src/com/cloud/server/Criteria.java +++ b/server/src/com/cloud/server/Criteria.java @@ -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; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 86385d8c8ef..1d1a24a77d4 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -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 domainsToSearchForVms = new ArrayList(); 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 recursivelySearchForVms(ListVMsCmd cmd, String path, boolean isAdmin, List domainToSearchWithin, Long accountId) { List result = new ArrayList(); + 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"); }