Skip to content

Commit c1d4d88

Browse files
committed
list network offerings with specific tags only
1 parent 1ff68cf commit c1d4d88

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

api/src/main/java/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ public class ListDiskOfferingsCmd extends BaseListProjectAndAccountResourcesCmd
7777
since = "4.19")
7878
private String diskOfferingState;
7979

80+
@Parameter(name = ApiConstants.TAGS, type = CommandType.STRING, description = "list network offerings by tags", length = 4096)
81+
private String tags;
82+
8083
/////////////////////////////////////////////////////
8184
/////////////////// Accessors ///////////////////////
8285
/////////////////////////////////////////////////////
@@ -116,6 +119,10 @@ public State getState() {
116119
return state;
117120
}
118121

122+
public String getTags() {
123+
return tags;
124+
}
125+
119126
/////////////////////////////////////////////////////
120127
/////////////// API Implementation///////////////////
121128
/////////////////////////////////////////////////////

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3385,7 +3385,7 @@ private Pair<List<ImageStoreJoinVO>, Integer> searchForCacheStoresInternal(ListS
33853385
@Override
33863386
public ListResponse<DiskOfferingResponse> searchForDiskOfferings(ListDiskOfferingsCmd cmd) {
33873387
Pair<List<DiskOfferingJoinVO>, Integer> result = searchForDiskOfferingsInternal(cmd);
3388-
ListResponse<DiskOfferingResponse> response = new ListResponse<DiskOfferingResponse>();
3388+
ListResponse<DiskOfferingResponse> response = new ListResponse<>();
33893389
List<DiskOfferingResponse> offeringResponses = ViewResponseHelper.createDiskOfferingResponse(result.first().toArray(new DiskOfferingJoinVO[result.first().size()]));
33903390
response.setResponses(offeringResponses, result.second());
33913391
return response;
@@ -3444,10 +3444,11 @@ private Ternary<List<Long>, Integer, String[]> searchForDiskOfferingsIdsAndCount
34443444
Boolean encrypt = cmd.getEncrypt();
34453445
String storageType = cmd.getStorageType();
34463446
DiskOffering.State state = cmd.getState();
3447+
String tags = cmd.getTags();
34473448

34483449
Filter searchFilter = new Filter(DiskOfferingVO.class, "sortKey", SortKeyAscending.value(), cmd.getStartIndex(), cmd.getPageSizeVal());
34493450
searchFilter.addOrderBy(DiskOfferingVO.class, "id", true);
3450-
SearchBuilder<DiskOfferingVO> diskOfferingSearch = _diskOfferingDao.createSearchBuilder();
3451+
SearchBuilder<DiskOfferingJoinVO> diskOfferingSearch = _diskOfferingJoinDao.createSearchBuilder();
34513452
diskOfferingSearch.select(null, Func.DISTINCT, diskOfferingSearch.entity().getId()); // select distinct
34523453

34533454
diskOfferingSearch.and("computeOnly", diskOfferingSearch.entity().isComputeOnly(), Op.EQ);
@@ -3456,6 +3457,10 @@ private Ternary<List<Long>, Integer, String[]> searchForDiskOfferingsIdsAndCount
34563457
diskOfferingSearch.and("state", diskOfferingSearch.entity().getState(), Op.EQ);
34573458
}
34583459

3460+
if (tags != null) {
3461+
diskOfferingSearch.and("tags", SearchCriteria.Op.EQ, tags);
3462+
}
3463+
34593464
// Keeping this logic consistent with domain specific zones
34603465
// if a domainId is provided, we just return the disk offering
34613466
// associated with this domain
@@ -3471,17 +3476,17 @@ private Ternary<List<Long>, Integer, String[]> searchForDiskOfferingsIdsAndCount
34713476
domainDetailsSearch.entity().getName(), diskOfferingSearch.entity().setString(ApiConstants.DOMAIN_ID));
34723477

34733478
if (!isRootAdmin) {
3474-
diskOfferingSearch.and("displayOffering", diskOfferingSearch.entity().getDisplayOffering(), Op.EQ);
3479+
diskOfferingSearch.and("displayOffering", diskOfferingSearch.entity().isDisplayOffering(), Op.EQ);
34753480
}
34763481

3477-
SearchCriteria<DiskOfferingVO> sc = diskOfferingSearch.create();
3482+
SearchCriteria<DiskOfferingJoinVO> sc = diskOfferingSearch.create();
34783483
sc.setParameters("computeOnly", false);
34793484
sc.setParameters("activeState", DiskOffering.State.Active);
34803485

34813486
sc.setJoinParameters("domainDetailsSearch", "domainId", domainId);
34823487

3483-
Pair<List<DiskOfferingVO>, Integer> uniquePairs = _diskOfferingDao.searchAndCount(sc, searchFilter);
3484-
List<Long> idsArray = uniquePairs.first().stream().map(DiskOfferingVO::getId).collect(Collectors.toList());
3488+
Pair<List<DiskOfferingJoinVO>, Integer> uniquePairs = _diskOfferingJoinDao.searchAndCount(sc, searchFilter);
3489+
List<Long> idsArray = uniquePairs.first().stream().map(DiskOfferingJoinVO::getId).collect(Collectors.toList());
34853490
return new Ternary<>(idsArray, uniquePairs.second(), new String[0]);
34863491
} else {
34873492
throw new PermissionDeniedException("The account:" + account.getAccountName() + " does not fall in the same domain hierarchy as the disk offering");
@@ -3564,7 +3569,7 @@ private Ternary<List<Long>, Integer, String[]> searchForDiskOfferingsIdsAndCount
35643569
domainDetailsSearch.entity().getName(), diskOfferingSearch.entity().setString(ApiConstants.DOMAIN_ID));
35653570
}
35663571

3567-
SearchCriteria<DiskOfferingVO> sc = diskOfferingSearch.create();
3572+
SearchCriteria<DiskOfferingJoinVO> sc = diskOfferingSearch.create();
35683573

35693574
sc.setParameters("computeOnly", false);
35703575

@@ -3624,7 +3629,7 @@ private Ternary<List<Long>, Integer, String[]> searchForDiskOfferingsIdsAndCount
36243629
sc.setJoinParameters("domainDetailsSearch", "domainIdIN", domainIds.toArray());
36253630
}
36263631

3627-
Pair<List<DiskOfferingVO>, Integer> uniquePairs = _diskOfferingDao.searchAndCount(sc, searchFilter);
3632+
Pair<List<DiskOfferingJoinVO>, Integer> uniquePairs = _diskOfferingJoinDao.searchAndCount(sc, searchFilter);
36283633
String[] requiredTagsArray = new String[0];
36293634
if (CollectionUtils.isNotEmpty(uniquePairs.first()) && VolumeApiServiceImpl.MatchStoragePoolTagsWithDiskOffering.valueIn(zoneId)) {
36303635
if (volumeId != null) {
@@ -3633,7 +3638,7 @@ private Ternary<List<Long>, Integer, String[]> searchForDiskOfferingsIdsAndCount
36333638
requiredTagsArray = _storageTagDao.getStoragePoolTags(storagePoolId).toArray(new String[0]);
36343639
}
36353640
}
3636-
List<Long> idsArray = uniquePairs.first().stream().map(DiskOfferingVO::getId).collect(Collectors.toList());
3641+
List<Long> idsArray = uniquePairs.first().stream().map(DiskOfferingJoinVO::getId).collect(Collectors.toList());
36373642

36383643
return new Ternary<>(idsArray, uniquePairs.second(), requiredTagsArray);
36393644
}

0 commit comments

Comments
 (0)