diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java index 7f25c2d2f22..9971d058988 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/com/cloud/api/ApiConstants.java @@ -178,6 +178,7 @@ public class ApiConstants { public static final String TARGET_IQN = "targetiqn"; public static final String TEMPLATE_FILTER = "templatefilter"; public static final String TEMPLATE_ID = "templateid"; + public static final String ISO_ID = "isoid"; public static final String TIMEOUT = "timeout"; public static final String TIMEZONE = "timezone"; public static final String TYPE = "type"; diff --git a/api/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/com/cloud/api/commands/ListVMsCmd.java index 8919a2a26b2..35d43f913ec 100755 --- a/api/src/com/cloud/api/commands/ListVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMsCmd.java @@ -84,6 +84,13 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { "value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min]. If no parameter is passed in, the details will be defaulted to all" ) private List viewDetails; + @IdentityMapper(entityTableName="vm_template") + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, description="list vms by template") + private Long templateId; + + @IdentityMapper(entityTableName="vm_template") + @Parameter(name=ApiConstants.ISO_ID, type=CommandType.LONG, description="list vms by iso") + private Long isoId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -137,6 +144,14 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { return storageId; } + public Long getTemplateId() { + return templateId; + } + + public Long getIsoId() { + return isoId; + } + public EnumSet getDetails() throws InvalidParameterValueException { EnumSet dv; if (viewDetails==null || viewDetails.size() <=0){ diff --git a/server/src/com/cloud/server/Criteria.java b/server/src/com/cloud/server/Criteria.java index ba2408681f6..2bb419a3dcb 100755 --- a/server/src/com/cloud/server/Criteria.java +++ b/server/src/com/cloud/server/Criteria.java @@ -75,6 +75,8 @@ public class Criteria { public static final String NETWORKID = "networkId"; public static final String HYPERVISOR = "hypervisor"; public static final String STORAGE_ID="storageid"; + public static final String TEMPLATE_ID = "templateid"; + public static final String ISO_ID = "isoid"; 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 54310ded9b8..83de4d63b8d 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2998,6 +2998,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager c.addCriteria(Criteria.GROUPID, cmd.getGroupId()); c.addCriteria(Criteria.FOR_VIRTUAL_NETWORK, cmd.getForVirtualNetwork()); c.addCriteria(Criteria.NETWORKID, cmd.getNetworkId()); + c.addCriteria(Criteria.TEMPLATE_ID, cmd.getTemplateId()); + c.addCriteria(Criteria.ISO_ID, cmd.getIsoId()); if (domainId != null) { c.addCriteria(Criteria.DOMAINID, domainId); @@ -3047,6 +3049,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Object networkId = c.getCriteria(Criteria.NETWORKID); Object hypervisor = c.getCriteria(Criteria.HYPERVISOR); Object storageId = c.getCriteria(Criteria.STORAGE_ID); + Object templateId = c.getCriteria(Criteria.TEMPLATE_ID); + Object isoId = c.getCriteria(Criteria.ISO_ID); sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); @@ -3059,6 +3063,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager 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); + sb.and("templateId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ); + sb.and("isoId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ); if (groupId != null && (Long) groupId == -1) { SearchBuilder vmSearch = _groupVMMapDao.createSearchBuilder(); @@ -3132,6 +3138,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (id != null) { sc.setParameters("id", id); } + + if (templateId != null) { + sc.setParameters("templateId", templateId); + } + + if (isoId != null) { + sc.setParameters("isoId", isoId); + } if (networkId != null) { sc.setJoinParameters("nicSearch", "networkId", networkId);