diff --git a/api/src/com/cloud/api/commands/ListRoutersCmd.java b/api/src/com/cloud/api/commands/ListRoutersCmd.java index 867b45518b4..72a9144edda 100644 --- a/api/src/com/cloud/api/commands/ListRoutersCmd.java +++ b/api/src/com/cloud/api/commands/ListRoutersCmd.java @@ -70,6 +70,9 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List networks by VPC") private Long vpcId; + + @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="if true is passed for this parameter, list only VPC routers") + private Boolean forVpc; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -106,6 +109,10 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public Long getVpcId() { return vpcId; } + + public Boolean getForVpc() { + return forVpc; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 61c3a383054..d4bf7506789 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1596,6 +1596,7 @@ public class ManagementServerImpl implements ManagementServer { String keyword = cmd.getKeyword(); Long networkId = cmd.getNetworkId(); Long vpcId = cmd.getVpcId(); + Boolean forVpc = cmd.getForVpc(); Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); @@ -1617,6 +1618,14 @@ public class ManagementServerImpl implements ManagementServer { sb.and("podId", sb.entity().getPodIdToDeployIn(), SearchCriteria.Op.EQ); sb.and("hostId", sb.entity().getHostId(), SearchCriteria.Op.EQ); sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ); + + if (forVpc != null) { + if (forVpc) { + sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NNULL); + } else { + sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NULL); + } + } if (networkId != null) { SearchBuilder nicSearch = _nicDao.createSearchBuilder(); @@ -1627,7 +1636,7 @@ public class ManagementServerImpl implements ManagementServer { sb.join("nicSearch", nicSearch, sb.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER); } - + SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);