From 2ef5a21ffc29e4749a5d1e51eb62d79a1895b9ea Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 20 Aug 2024 11:19:03 +0200 Subject: [PATCH 1/5] extend ACL search facility --- .../main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index 82e8462a559d..51ebbdc36ea9 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -156,6 +156,7 @@ public Pair, Integer> listNetworkACLs(final ListNetwo final SearchCriteria ssc = _networkACLDao.createSearchCriteria(); ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("reason", Op.LIKE, "%" + keyword + "%"); sc.addAnd("name", SearchCriteria.Op.SC, ssc); } From c53c6d6628fa39b40ebca866dfee7d7a683491c8 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Thu, 22 Aug 2024 09:00:37 +0200 Subject: [PATCH 2/5] cleanup --- .../java/com/cloud/network/vpc/NetworkACLServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index 51ebbdc36ea9..d9e0181f0687 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -765,7 +765,7 @@ public Pair, Integer> listNetworkACLItems(final L // aclId is not specified // List permitted VPCs and filter aclItems - final List permittedAccounts = new ArrayList(); + final List permittedAccounts = new ArrayList<>(); Long domainId = cmd.getDomainId(); boolean isRecursive = cmd.isRecursive(); final String accountName = cmd.getAccountName(); @@ -781,7 +781,7 @@ public Pair, Integer> listNetworkACLItems(final L final SearchCriteria scVpc = sbVpc.create(); _accountMgr.buildACLSearchCriteria(scVpc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); final List vpcs = _vpcDao.search(scVpc, null); - final List vpcIds = new ArrayList(); + final List vpcIds = new ArrayList<>(); for (final VpcVO vpc : vpcs) { vpcIds.add(vpc.getId()); } From 859c0dca26ac2ad6628dddde82d05f1b0fff58f1 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 23 Aug 2024 11:46:40 +0200 Subject: [PATCH 3/5] search rules in an ACL item list --- .../network/vpc/NetworkACLServiceImpl.java | 39 ++++++++++++------- ui/src/views/network/AclListRulesTab.vue | 18 ++++++++- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index d9e0181f0687..e4f9c6a12c69 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -156,7 +156,7 @@ public Pair, Integer> listNetworkACLs(final ListNetwo final SearchCriteria ssc = _networkACLDao.createSearchCriteria(); ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("reason", Op.LIKE, "%" + keyword + "%"); + ssc.addOr("reason", SearchCriteria.Op.LIKE, "%" + keyword + "%"); sc.addAnd("name", SearchCriteria.Op.SC, ssc); } @@ -698,6 +698,7 @@ public Pair, Integer> listNetworkACLItems(final L final String trafficType = cmd.getTrafficType(); final String protocol = cmd.getProtocol(); final String action = cmd.getAction(); + final String keyword = cmd.getKeyword(); final Map tags = cmd.getTags(); final Account caller = CallContext.current().getCallingAccount(); @@ -709,6 +710,7 @@ public Pair, Integer> listNetworkACLItems(final L sb.and("trafficType", sb.entity().getTrafficType(), Op.EQ); sb.and("protocol", sb.entity().getProtocol(), Op.EQ); sb.and("action", sb.entity().getAction(), Op.EQ); + sb.and("reason", sb.entity().getReason(), Op.EQ); if (tags != null && !tags.isEmpty()) { final SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); @@ -731,24 +733,31 @@ public Pair, Integer> listNetworkACLItems(final L final SearchCriteria sc = sb.create(); - if (id != null) { - sc.setParameters("id", id); - } + if (StringUtils.isNotBlank(keyword)) { + final SearchCriteria ssc = _networkACLItemDao.createSearchCriteria(); + ssc.addOr("protocol", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("reason", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("acl_id", SearchCriteria.Op.SC, ssc); + } else { - if (networkId != null) { - final Network network = _networkDao.findById(networkId); - aclId = network.getNetworkACLId(); - if (aclId == null) { - // No aclId associated with the network. - //Return empty list - return new Pair(new ArrayList(), 0); + if (id != null) { + sc.setParameters("id", id); } - } - if (trafficType != null) { - sc.setParameters("trafficType", trafficType); - } + if (networkId != null) { + final Network network = _networkDao.findById(networkId); + aclId = network.getNetworkACLId(); + if (aclId == null) { + // No aclId associated with the network. + //Return empty list + return new Pair(new ArrayList(), 0); + } + } + if (trafficType != null) { + sc.setParameters("trafficType", trafficType); + } + } if (aclId != null) { // Get VPC and check access final NetworkACL acl = _networkACLDao.findById(aclId); diff --git a/ui/src/views/network/AclListRulesTab.vue b/ui/src/views/network/AclListRulesTab.vue index fb0495b6c759..d12ed569652a 100644 --- a/ui/src/views/network/AclListRulesTab.vue +++ b/ui/src/views/network/AclListRulesTab.vue @@ -17,7 +17,8 @@ {{ $t('label.acl.export') }} +
@@ -324,6 +333,7 @@ export default { }, data () { return { + searchQuery: '', // Bind this to the search input acls: [], fetchLoading: false, protocolNumbers: [], @@ -433,7 +443,11 @@ export default { }, fetchData () { this.fetchLoading = true - api('listNetworkACLs', { aclid: this.resource.id }).then(json => { + const params = { + aclid: this.resource.id, + keyword: this.searchQuery + } + api('listNetworkACLs', params).then(json => { this.acls = json.listnetworkaclsresponse.networkacl || [] if (this.acls.length > 0) { this.acls.sort((a, b) => a.number - b.number) From 696b7e542929c4b71922146682aa67f91ff77163 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Thu, 5 Sep 2024 18:00:14 +0200 Subject: [PATCH 4/5] comments (npe and search field) --- .../cloud/network/vpc/NetworkACLServiceImpl.java | 1 - ui/src/views/network/AclListRulesTab.vue | 16 ++++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index e4f9c6a12c69..3878817a3eaa 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -156,7 +156,6 @@ public Pair, Integer> listNetworkACLs(final ListNetwo final SearchCriteria ssc = _networkACLDao.createSearchCriteria(); ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("reason", SearchCriteria.Op.LIKE, "%" + keyword + "%"); sc.addAnd("name", SearchCriteria.Op.SC, ssc); } diff --git a/ui/src/views/network/AclListRulesTab.vue b/ui/src/views/network/AclListRulesTab.vue index d12ed569652a..53b7a21db39e 100644 --- a/ui/src/views/network/AclListRulesTab.vue +++ b/ui/src/views/network/AclListRulesTab.vue @@ -32,14 +32,14 @@ {{ $t('label.acl.export') }} - +
From 21f9cbc7d690f5999ca69fde1706472231d359d8 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 9 Sep 2024 14:22:44 +0200 Subject: [PATCH 5/5] review comments --- .../network/vpc/NetworkACLServiceImpl.java | 30 +++++++++---------- ui/src/views/network/AclListRulesTab.vue | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index 3878817a3eaa..543381732829 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -737,25 +737,23 @@ public Pair, Integer> listNetworkACLItems(final L ssc.addOr("protocol", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("reason", SearchCriteria.Op.LIKE, "%" + keyword + "%"); sc.addAnd("acl_id", SearchCriteria.Op.SC, ssc); - } else { - - if (id != null) { - sc.setParameters("id", id); - } + } + if (id != null) { + sc.setParameters("id", id); + } - if (networkId != null) { - final Network network = _networkDao.findById(networkId); - aclId = network.getNetworkACLId(); - if (aclId == null) { - // No aclId associated with the network. - //Return empty list - return new Pair(new ArrayList(), 0); - } + if (networkId != null) { + final Network network = _networkDao.findById(networkId); + aclId = network.getNetworkACLId(); + if (aclId == null) { + // No aclId associated with the network. + //Return empty list + return new Pair(new ArrayList(), 0); } + } - if (trafficType != null) { - sc.setParameters("trafficType", trafficType); - } + if (trafficType != null) { + sc.setParameters("trafficType", trafficType); } if (aclId != null) { // Get VPC and check access diff --git a/ui/src/views/network/AclListRulesTab.vue b/ui/src/views/network/AclListRulesTab.vue index 53b7a21db39e..5303a97aefb3 100644 --- a/ui/src/views/network/AclListRulesTab.vue +++ b/ui/src/views/network/AclListRulesTab.vue @@ -34,7 +34,7 @@