diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index 54f735d51cf..3c0c8b039b3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -20,8 +20,6 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; -import org.apache.log4j.Logger; - import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiCommandJobType; @@ -35,11 +33,13 @@ import org.apache.cloudstack.api.response.IsoVmResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.log4j.Logger; import com.cloud.exception.InvalidParameterValueException; @@ -112,6 +112,9 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { @Parameter(name = ApiConstants.AFFINITY_GROUP_ID, type = CommandType.UUID, entityType = AffinityGroupResponse.class, description = "list vms by affinity group") private Long affinityGroupId; + @Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.UUID, entityType = ServiceOfferingResponse.class, description = "list by the service offering", since = "4.4") + private Long serviceOffId; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -140,6 +143,10 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { return state; } + public Long getServiceOfferingId() { + return serviceOffId; + } + public Long getZoneId() { return zoneId; } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index 8c998a5c109..92afff4b23f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -16,14 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; -import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiCommandJobType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; @@ -31,6 +30,7 @@ import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.log4j.Logger; @APICommand(name = "listVolumes", description = "Lists all volumes.", responseObject = VolumeResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) @@ -72,6 +72,9 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { authorized = {RoleType.Admin}) private Long storageId; + @Parameter(name = ApiConstants.DISK_OFFERING_ID, type = CommandType.UUID, entityType = DiskOfferingResponse.class, description = "list volumes by disk offering") + private Long diskOfferingId; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -92,6 +95,10 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { return podId; } + public Long getDiskOfferingId() { + return diskOfferingId; + } + public String getType() { return type; } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 4d5a42fe569..6e2b36cb0db 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -735,6 +735,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { c.addCriteria(Criteria.ISO_ID, cmd.getIsoId()); c.addCriteria(Criteria.VPC_ID, cmd.getVpcId()); c.addCriteria(Criteria.AFFINITY_GROUP_ID, cmd.getAffinityGroupId()); + c.addCriteria(Criteria.SERVICE_OFFERING_ID, cmd.getServiceOfferingId()); if (domainId != null) { c.addCriteria(Criteria.DOMAINID, domainId); @@ -791,6 +792,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { Object isoId = c.getCriteria(Criteria.ISO_ID); Object vpcId = c.getCriteria(Criteria.VPC_ID); Object affinityGroupId = c.getCriteria(Criteria.AFFINITY_GROUP_ID); + Object serviceOffId = c.getCriteria(Criteria.SERVICE_OFFERING_ID); sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); @@ -807,6 +809,10 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sb.and("isoId", sb.entity().getIsoId(), SearchCriteria.Op.EQ); sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ); + if (serviceOffId != null) { + sb.and("serviceOfferingId", sb.entity().getServiceOfferingId(), SearchCriteria.Op.EQ); + } + if (groupId != null && (Long)groupId != -1) { sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ); } @@ -862,6 +868,10 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sc.addAnd("displayName", SearchCriteria.Op.SC, ssc); } + if (serviceOffId != null) { + sc.setParameters("serviceOfferingId", serviceOffId); + } + if (id != null) { sc.setParameters("id", id); } @@ -1612,6 +1622,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { Map tags = cmd.getTags(); boolean isRootAdmin = _accountMgr.isRootAdmin(caller.getType()); Long storageId = cmd.getStorageId(); + Long diskOffId = cmd.getDiskOfferingId(); Long zoneId = cmd.getZoneId(); Long podId = null; @@ -1645,6 +1656,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); sb.and("storageId", sb.entity().getPoolId(), SearchCriteria.Op.EQ); + sb.and("diskOfferingId", sb.entity().getDiskOfferingId(), SearchCriteria.Op.EQ); // Only return volumes that are not destroyed sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ); sb.and("systemUse", sb.entity().isSystemUse(), SearchCriteria.Op.NEQ); @@ -1685,6 +1697,10 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sc.addAnd("tagKey", SearchCriteria.Op.SC, tagSc); } + if (diskOffId != null) { + sc.setParameters("diskOfferingId", diskOffId); + } + if (id != null) { sc.setParameters("id", id); } diff --git a/server/src/com/cloud/server/Criteria.java b/server/src/com/cloud/server/Criteria.java index 6ff8a2811ff..de29e3ee5e0 100755 --- a/server/src/com/cloud/server/Criteria.java +++ b/server/src/com/cloud/server/Criteria.java @@ -84,6 +84,7 @@ public class Criteria { public static final String ISO_ID = "isoid"; public static final String VPC_ID = "vpcId"; public static final String AFFINITY_GROUP_ID = "affinitygroupid"; + public static final String SERVICE_OFFERING_ID = "serviceofferingid"; public Criteria(String orderBy, Boolean ascending, Long offset, Long limit) { this.offset = offset;