diff --git a/api/src/main/java/org/apache/cloudstack/api/response/DiskOfferingResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DiskOfferingResponse.java index 7c220f627c0..1bea164d359 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/DiskOfferingResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/DiskOfferingResponse.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import java.util.Map; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponseWithAnnotations; @@ -159,6 +160,10 @@ public class DiskOfferingResponse extends BaseResponseWithAnnotations { @Param(description = "To allow or disallow the resize operation on the disks created from this disk offering, if the flag is true then resize is not allowed", since = "4.17") private Boolean diskSizeStrictness; + @SerializedName(ApiConstants.DETAILS) + @Param(description = "additional key/value details tied with this disk offering", since = "4.17") + private Map details; + public Boolean getDisplayOffering() { return displayOffering; } @@ -375,4 +380,8 @@ public class DiskOfferingResponse extends BaseResponseWithAnnotations { public void setDiskSizeStrictness(Boolean diskSizeStrictness) { this.diskSizeStrictness = diskSizeStrictness; } + + public void setDetails(Map details) { + this.details = details; + } } diff --git a/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java index 52667546b69..6b10afbdb1f 100644 --- a/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java @@ -131,6 +131,7 @@ public class DiskOfferingJoinDaoImpl extends GenericDaoBase offeringDetails = ApiDBUtils.getResourceDetails(offering.getId(), ResourceTag.ResourceObjectType.DiskOffering); + diskOfferingResponse.setDetails(offeringDetails); if (offeringDetails != null && !offeringDetails.isEmpty()) { String vsphereStoragePolicyId = offeringDetails.get(ApiConstants.STORAGE_POLICY); if (vsphereStoragePolicyId != null) { diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index 1dd73aa593d..7f6126c349f 100755 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3535,14 +3535,11 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati detailsVO.add(new DiskOfferingDetailVO(offering.getId(), ApiConstants.ZONE_ID, String.valueOf(zoneId), false)); } } - if (details != null && !details.isEmpty()) { - // Support disk offering details for below parameters - if (details.containsKey(Volume.BANDWIDTH_LIMIT_IN_MBPS)) { - detailsVO.add(new DiskOfferingDetailVO(offering.getId(), Volume.BANDWIDTH_LIMIT_IN_MBPS, details.get(Volume.BANDWIDTH_LIMIT_IN_MBPS), false)); - } - if (details.containsKey(Volume.IOPS_LIMIT)) { - detailsVO.add(new DiskOfferingDetailVO(offering.getId(), Volume.IOPS_LIMIT, details.get(Volume.IOPS_LIMIT), false)); - } + if (MapUtils.isNotEmpty(details)) { + details.forEach((key, value) -> { + boolean displayDetail = !StringUtils.equalsAny(key, Volume.BANDWIDTH_LIMIT_IN_MBPS, Volume.IOPS_LIMIT); + detailsVO.add(new DiskOfferingDetailVO(offering.getId(), key, value, displayDetail)); + }); } if (storagePolicyID != null) { detailsVO.add(new DiskOfferingDetailVO(offering.getId(), ApiConstants.STORAGE_POLICY, String.valueOf(storagePolicyID), false));