Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseListDomainResourcesCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.BaseCmd.CommandType;
import org.apache.cloudstack.api.response.DiskOfferingResponse;
import org.apache.cloudstack.api.response.ListResponse;

Expand Down Expand Up @@ -60,6 +61,12 @@ public class ListDiskOfferingsCmd extends BaseListDomainResourcesCmd {
@Parameter(name = ApiConstants.ENCRYPT, type = CommandType.BOOLEAN, description = "listed offerings support disk encryption", since = "4.18")
private Boolean encrypt;

@Parameter(name = ApiConstants.STORAGE_TYPE,
type = CommandType.STRING,
description = "the storage type of the service offering. Values are local and shared.",
since = "4.19")
private String storageType;

/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
Expand All @@ -84,6 +91,10 @@ public Long getVolumeId() {

public Boolean getEncrypt() { return encrypt; }

public String getStorageType() {
return storageType;
}

/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseListDomainResourcesCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.BaseCmd.CommandType;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
import org.apache.cloudstack.api.response.UserVmResponse;
Expand Down Expand Up @@ -88,6 +89,12 @@ public class ListServiceOfferingsCmd extends BaseListDomainResourcesCmd {
since = "4.18")
private Boolean encryptRoot;

@Parameter(name = ApiConstants.STORAGE_TYPE,
type = CommandType.STRING,
description = "the storage type of the service offering. Values are local and shared.",
since = "4.19")
private String storageType;

/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
Expand Down Expand Up @@ -130,6 +137,10 @@ public Integer getCpuSpeed() {

public Boolean getEncryptRoot() { return encryptRoot; }

public String getStorageType() {
return storageType;
}

/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
Expand Down
19 changes: 19 additions & 0 deletions server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@
import com.cloud.network.security.SecurityGroupVMMapVO;
import com.cloud.network.security.dao.SecurityGroupVMMapDao;
import com.cloud.offering.DiskOffering;
import com.cloud.offering.ServiceOffering;
import com.cloud.org.Grouping;
import com.cloud.projects.Project;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
Expand Down Expand Up @@ -3130,6 +3131,8 @@ private Pair<List<DiskOfferingJoinVO>, Integer> searchForDiskOfferingsInternal(L
Long volumeId = cmd.getVolumeId();
Long storagePoolId = cmd.getStoragePoolId();
Boolean encrypt = cmd.getEncrypt();
String storageType = cmd.getStorageType();

// Keeping this logic consistent with domain specific zones
// if a domainId is provided, we just return the disk offering
// associated with this domain
Expand Down Expand Up @@ -3181,6 +3184,8 @@ private Pair<List<DiskOfferingJoinVO>, Integer> searchForDiskOfferingsInternal(L
sc.addAnd("encrypt", SearchCriteria.Op.EQ, encrypt);
}

useStorageType(sc, storageType);

if (zoneId != null) {
SearchBuilder<DiskOfferingJoinVO> sb = _diskOfferingJoinDao.createSearchBuilder();
sb.and("zoneId", sb.entity().getZoneId(), Op.FIND_IN_SET);
Expand Down Expand Up @@ -3260,6 +3265,17 @@ private Pair<List<DiskOfferingJoinVO>, Integer> searchForDiskOfferingsInternal(L
return new Pair<>(result.first(), result.second());
}

private void useStorageType(SearchCriteria<?> sc, String storageType) {
if (storageType != null) {
if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.local.toString())) {
sc.addAnd("useLocalStorage", Op.EQ, true);

} else if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.shared.toString())) {
sc.addAnd("useLocalStorage", Op.EQ, false);
}
}
}

private List<Long> findRelatedDomainIds(Domain domain, boolean isRecursive) {
List<Long> domainIds = _domainDao.getDomainParentIds(domain.getId())
.stream().collect(Collectors.toList());
Expand Down Expand Up @@ -3309,6 +3325,7 @@ private Pair<List<ServiceOfferingJoinVO>, Integer> searchForServiceOfferingsInte
Integer memory = cmd.getMemory();
Integer cpuSpeed = cmd.getCpuSpeed();
Boolean encryptRoot = cmd.getEncryptRoot();
String storageType = cmd.getStorageType();

SearchCriteria<ServiceOfferingJoinVO> sc = _srvOfferingJoinDao.createSearchCriteria();
if (!accountMgr.isRootAdmin(caller.getId()) && isSystem) {
Expand Down Expand Up @@ -3432,6 +3449,8 @@ private Pair<List<ServiceOfferingJoinVO>, Integer> searchForServiceOfferingsInte
sc.addAnd("vmType", SearchCriteria.Op.EQ, vmTypeStr);
}

useStorageType(sc, storageType);

if (zoneId != null) {
SearchBuilder<ServiceOfferingJoinVO> sb = _srvOfferingJoinDao.createSearchBuilder();
sb.and("zoneId", sb.entity().getZoneId(), Op.FIND_IN_SET);
Expand Down