summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorsarthurdev <965089+sarthurdev@users.noreply.github.com>2022-06-10 16:57:21 +0200
committersarthurdev <965089+sarthurdev@users.noreply.github.com>2022-06-10 21:08:24 +0200
commit9791258d7d5320d3a8bfa45d43b59fd35e8a2131 (patch)
tree110a5a3fce0282f3140b1d792a3f1ec093dc2cbe /python
parentfcad9572e880ab5dd71636e0aa4842dc8997bc44 (diff)
downloadvyos-1x-9791258d7d5320d3a8bfa45d43b59fd35e8a2131.tar.gz
vyos-1x-9791258d7d5320d3a8bfa45d43b59fd35e8a2131.zip
firewall: T478: Add support for nesting groups
Diffstat (limited to 'python')
-rw-r--r--python/vyos/template.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/python/vyos/template.py b/python/vyos/template.py
index ee82f8f8f..3feda47c8 100644
--- a/python/vyos/template.py
+++ b/python/vyos/template.py
@@ -591,6 +591,39 @@ def nft_intra_zone_action(zone_conf, ipv6=False):
return f'jump {name_prefix}{name}'
return 'return'
+@register_filter('nft_nested_group')
+def nft_nested_group(out_list, includes, prefix):
+ if not vyos_defined(out_list):
+ out_list = []
+ for name in includes:
+ out_list.append(f'${prefix}{name}')
+ return out_list
+
+@register_filter('sort_nested_groups')
+def sort_nested_groups(groups):
+ seen = []
+ out = {}
+
+ def include_iterate(group_name):
+ group = groups[group_name]
+ if 'include' not in group:
+ if group_name not in out:
+ out[group_name] = groups[group_name]
+ return
+
+ for inc_group_name in group['include']:
+ if inc_group_name not in seen:
+ seen.append(inc_group_name)
+ include_iterate(inc_group_name)
+
+ if group_name not in out:
+ out[group_name] = groups[group_name]
+
+ for group_name in groups:
+ include_iterate(group_name)
+
+ return out.items()
+
@register_test('vyos_defined')
def vyos_defined(value, test_value=None, var_type=None):
"""