From 1a15488969fdc6dce38c94ab48412b9bfdcd493f Mon Sep 17 00:00:00 2001 From: Slavka Peleva Date: Fri, 10 Nov 2023 12:42:52 +0200 Subject: [PATCH 1/3] storagetype API param in list service/disk offerings --- .../user/offering/ListDiskOfferingsCmd.java | 11 ++++++++ .../offering/ListServiceOfferingsCmd.java | 11 ++++++++ .../com/cloud/api/query/QueryManagerImpl.java | 27 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java index 5fa24ec16301..c605b58d7c6d 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java @@ -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; @@ -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 /////////////////////// ///////////////////////////////////////////////////// @@ -84,6 +91,10 @@ public Long getVolumeId() { public Boolean getEncrypt() { return encrypt; } + public String getStorageType() { + return storageType; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index 3208ef58a4fa..f7c99459baa0 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -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; @@ -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 /////////////////////// ///////////////////////////////////////////////////// @@ -130,6 +137,10 @@ public Integer getCpuSpeed() { public Boolean getEncryptRoot() { return encryptRoot; } + public String getStorageType() { + return storageType; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index c99aa2932341..ece889e7272b 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -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; @@ -3130,6 +3131,8 @@ private Pair, 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 @@ -3181,6 +3184,13 @@ private Pair, Integer> searchForDiskOfferingsInternal(L sc.addAnd("encrypt", SearchCriteria.Op.EQ, encrypt); } + if (storageType != null) { + Boolean isLocalStorageType = getStorageType(storageType); + if (isLocalStorageType != null) { + sc.addAnd("useLocalStorage", Op.EQ, isLocalStorageType); + } + } + if (zoneId != null) { SearchBuilder sb = _diskOfferingJoinDao.createSearchBuilder(); sb.and("zoneId", sb.entity().getZoneId(), Op.FIND_IN_SET); @@ -3260,6 +3270,15 @@ private Pair, Integer> searchForDiskOfferingsInternal(L return new Pair<>(result.first(), result.second()); } + private Boolean getStorageType(String storageType) { + if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.local.toString())) { + return true; + } else if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.shared.toString())) { + return false; + } + return null; + } + private List findRelatedDomainIds(Domain domain, boolean isRecursive) { List domainIds = _domainDao.getDomainParentIds(domain.getId()) .stream().collect(Collectors.toList()); @@ -3309,6 +3328,7 @@ private Pair, Integer> searchForServiceOfferingsInte Integer memory = cmd.getMemory(); Integer cpuSpeed = cmd.getCpuSpeed(); Boolean encryptRoot = cmd.getEncryptRoot(); + String storageType = cmd.getStorageType(); SearchCriteria sc = _srvOfferingJoinDao.createSearchCriteria(); if (!accountMgr.isRootAdmin(caller.getId()) && isSystem) { @@ -3432,6 +3452,13 @@ private Pair, Integer> searchForServiceOfferingsInte sc.addAnd("vmType", SearchCriteria.Op.EQ, vmTypeStr); } + if (storageType != null) { + Boolean isLocalStorageType = getStorageType(storageType); + if (isLocalStorageType != null) { + sc.addAnd("useLocalStorage", Op.EQ, isLocalStorageType); + } + } + if (zoneId != null) { SearchBuilder sb = _srvOfferingJoinDao.createSearchBuilder(); sb.and("zoneId", sb.entity().getZoneId(), Op.FIND_IN_SET); From 1082e68511303eef3d8402c2e5d3d180da551cda Mon Sep 17 00:00:00 2001 From: Slavka Peleva Date: Fri, 10 Nov 2023 14:20:01 +0200 Subject: [PATCH 2/3] address comments --- .../com/cloud/api/query/QueryManagerImpl.java | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index ece889e7272b..2c12131ff0a7 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3184,12 +3184,7 @@ private Pair, Integer> searchForDiskOfferingsInternal(L sc.addAnd("encrypt", SearchCriteria.Op.EQ, encrypt); } - if (storageType != null) { - Boolean isLocalStorageType = getStorageType(storageType); - if (isLocalStorageType != null) { - sc.addAnd("useLocalStorage", Op.EQ, isLocalStorageType); - } - } + useStorageType(sc, storageType); if (zoneId != null) { SearchBuilder sb = _diskOfferingJoinDao.createSearchBuilder(); @@ -3270,13 +3265,15 @@ private Pair, Integer> searchForDiskOfferingsInternal(L return new Pair<>(result.first(), result.second()); } - private Boolean getStorageType(String storageType) { - if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.local.toString())) { - return true; - } else if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.shared.toString())) { - return false; + 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); + } } - return null; } private List findRelatedDomainIds(Domain domain, boolean isRecursive) { @@ -3452,12 +3449,7 @@ private Pair, Integer> searchForServiceOfferingsInte sc.addAnd("vmType", SearchCriteria.Op.EQ, vmTypeStr); } - if (storageType != null) { - Boolean isLocalStorageType = getStorageType(storageType); - if (isLocalStorageType != null) { - sc.addAnd("useLocalStorage", Op.EQ, isLocalStorageType); - } - } + useStorageType(sc, storageType); if (zoneId != null) { SearchBuilder sb = _srvOfferingJoinDao.createSearchBuilder(); @@ -3568,6 +3560,7 @@ private Pair, Integer> searchForServiceOfferingsInte return _srvOfferingJoinDao.searchAndCount(sc, searchFilter); } + @Override public ListResponse listDataCenters(ListZonesCmd cmd) { Pair, Integer> result = listDataCentersInternal(cmd); From d9fb8e5acd0a61840285cfab7071d606c77829cf Mon Sep 17 00:00:00 2001 From: Slavka Peleva Date: Tue, 14 Nov 2023 13:37:44 +0200 Subject: [PATCH 3/3] removed an empty extra line --- server/src/main/java/com/cloud/api/query/QueryManagerImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 2c12131ff0a7..91b8d7eb9884 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3560,7 +3560,6 @@ private Pair, Integer> searchForServiceOfferingsInte return _srvOfferingJoinDao.searchAndCount(sc, searchFilter); } - @Override public ListResponse listDataCenters(ListZonesCmd cmd) { Pair, Integer> result = listDataCentersInternal(cmd);