diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index b737212e599..ea9e277d7e4 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.RoleType; @@ -88,6 +89,9 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd implements UserC @Parameter(name = ApiConstants.DISPLAY_NETWORK, type = CommandType.BOOLEAN, description = "list resources by display flag; only ROOT admin is eligible to pass this parameter", since = "4.4", authorized = {RoleType.Admin}) private Boolean display; + @Parameter(name = ApiConstants.NETWORK_OFFERING_ID, type = CommandType.UUID, entityType = NetworkOfferingResponse.class, description = "list networks by network offering ID") + private Long networkOfferingId; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -144,6 +148,10 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd implements UserC return forVpc; } + public Long getNetworkOfferingId() { + return networkOfferingId; + } + @Override public Boolean getDisplay() { if (display != null) { diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index ad13887c4fc..d0673043431 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -1551,6 +1551,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C Map tags = cmd.getTags(); Boolean forVpc = cmd.getForVpc(); Boolean display = cmd.getDisplay(); + Long networkOfferingId = cmd.getNetworkOfferingId(); // 1) default is system to false if not specified // 2) reset parameter to false if it's specified by the regular user @@ -1679,29 +1680,29 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C if (isSystem == null || !isSystem) { if (!permittedAccounts.isEmpty()) { //get account level networks - networksToReturn.addAll(listAccountSpecificNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, - skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, permittedAccounts)); + networksToReturn.addAll(listAccountSpecificNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, + aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, permittedAccounts)); //get domain level networks if (domainId != null) { - networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, true, - restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, domainId, false)); + networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, + aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, domainId, false)); } } else { //add account specific networks - networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, - skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, path, isRecursive)); + networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, + aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, path, isRecursive)); //add domain specific networks of domain + parent domains - networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, - skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, path, isRecursive)); + networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, + aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, path, isRecursive)); //add networks of subdomains if (domainId == null) { - networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, true, - restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, caller.getDomainId(), true)); + networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, + aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, caller.getDomainId(), true)); } } } else { - networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, - restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter); + networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, networkOfferingId, + null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter); } if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { @@ -1748,8 +1749,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C return new Pair, Integer>(networksToReturn, networksToReturn.size()); } - private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, Boolean isSystem, Long zoneId, String guestIpType, String trafficType, - Long physicalNetworkId, String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map tags, Boolean display) { + private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, + Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, + Long networkOfferingId, String aclType, boolean skipProjectNetworks, Boolean restartRequired, + Boolean specifyIpRanges, Long vpcId, Map tags, Boolean display) { SearchCriteria sc = sb.create(); @@ -1819,6 +1822,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C } } + if (networkOfferingId != null) { + sc.addAnd("networkOfferingId", SearchCriteria.Op.EQ, networkOfferingId); + } + return sc; } diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js index 3d3783ddd4f..ae838d95639 100644 --- a/ui/scripts/configuration.js +++ b/ui/scripts/configuration.js @@ -4517,6 +4517,10 @@ detailView: { name: 'label.network.offering.details', + viewAll: { + label: 'label.networks', + path: 'network' + }, actions: { edit: { label: 'label.edit', diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 77cce337f0c..47e9e3dd3e7 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -946,6 +946,11 @@ var data = {}; listViewDataProvider(args, data); + if ("networkOfferings" in args.context) { + $.extend(data, { + networkofferingid: args.context.networkOfferings[0].id + }); + } if ("routers" in args.context) { if ("vpcid" in args.context.routers[0]) { $.extend(data, {