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 6f32b58b733b..476d7c487ab2 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 @@ -28,7 +28,6 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; 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; @@ -77,6 +76,9 @@ public class ListDiskOfferingsCmd extends BaseListProjectAndAccountResourcesCmd since = "4.19") private String diskOfferingState; + @Parameter(name = ApiConstants.TAGS, type = CommandType.STRING, description = "list disk offerings by tags", length = 4096) + private String tags; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -116,6 +118,10 @@ public State getState() { return state; } + public String getTags() { + return tags; + } + ///////////////////////////////////////////////////// /////////////// 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 421285257829..f58f862799ec 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3385,7 +3385,7 @@ private Pair, Integer> searchForCacheStoresInternal(ListS @Override public ListResponse searchForDiskOfferings(ListDiskOfferingsCmd cmd) { Pair, Integer> result = searchForDiskOfferingsInternal(cmd); - ListResponse response = new ListResponse(); + ListResponse response = new ListResponse<>(); List offeringResponses = ViewResponseHelper.createDiskOfferingResponse(result.first().toArray(new DiskOfferingJoinVO[result.first().size()])); response.setResponses(offeringResponses, result.second()); return response; @@ -3444,6 +3444,7 @@ private Ternary, Integer, String[]> searchForDiskOfferingsIdsAndCount Boolean encrypt = cmd.getEncrypt(); String storageType = cmd.getStorageType(); DiskOffering.State state = cmd.getState(); + String tags = cmd.getTags(); Filter searchFilter = new Filter(DiskOfferingVO.class, "sortKey", SortKeyAscending.value(), cmd.getStartIndex(), cmd.getPageSizeVal()); searchFilter.addOrderBy(DiskOfferingVO.class, "id", true); @@ -3520,6 +3521,10 @@ private Ternary, Integer, String[]> searchForDiskOfferingsIdsAndCount diskOfferingSearch.and("encrypt", diskOfferingSearch.entity().getEncrypt(), Op.EQ); } + if (tags != null) { + diskOfferingSearch.and("tags", diskOfferingSearch.entity().getTags(), Op.EQ); + } + if (storageType != null || zoneId != null) { diskOfferingSearch.and("useLocalStorage", diskOfferingSearch.entity().isUseLocalStorage(), Op.EQ); } @@ -3589,6 +3594,10 @@ private Ternary, Integer, String[]> searchForDiskOfferingsIdsAndCount sc.setParameters("encrypt", encrypt); } + if (tags != null) { + sc.setParameters("tags", tags); + } + if (storageType != null) { if (storageType.equalsIgnoreCase(ServiceOffering.StorageType.local.toString())) { sc.setParameters("useLocalStorage", true);