diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/firewall.py | 34 | ||||
| -rwxr-xr-x | src/conf_mode/policy_route.py | 47 |
2 files changed, 32 insertions, 49 deletions
diff --git a/src/conf_mode/firewall.py b/src/conf_mode/firewall.py index 5208c4368..4a2706a03 100755 --- a/src/conf_mode/firewall.py +++ b/src/conf_mode/firewall.py @@ -22,8 +22,8 @@ from glob import glob from sys import exit from vyos.base import Warning from vyos.config import Config -from vyos.configdict import is_node_changed, node_changed -from vyos.configdiff import Diff +from vyos.configdict import is_node_changed +from vyos.configdiff import Diff, get_config_diff from vyos.configdep import set_dependents, call_dependents from vyos.configverify import verify_interface_exists from vyos.ethtool import Ethtool @@ -92,17 +92,12 @@ def geoip_sets(firewall): return out def geoip_updated(conf): - changes = node_changed(conf, ['firewall'], - key_mangling=('-', '_'), - recursive=True, - expand_nodes=Diff.ADD | Diff.DELETE) - updated = False - - for _, path in dict_search_recursive(changes, 'geoip'): - updated = True - break - - return updated + D = get_config_diff(conf, key_mangling=('-', '_')) + diff = D.get_child_nodes_diff(['firewall'], + expand_nodes=Diff.ADD | Diff.DELETE, + recursive=True) + return any(any(dict_search_recursive(diff.get(section, {}), 'geoip')) + for section in ('add', 'delete')) def get_config(config=None): if config: @@ -124,6 +119,9 @@ def get_config(config=None): firewall['geoip_sets'] = geoip_sets(firewall) firewall['geoip_updated'] = geoip_updated(conf) + firewall['policy'] = conf.get_config_dict( + ['policy'], key_mangling=('-', '_'), + get_first_key=True, no_tag_node_value_mangle=True) fqdn_config_parse(firewall, 'firewall') @@ -739,12 +737,10 @@ def apply(firewall): domain_action = 'stop' call(f'systemctl {domain_action} vyos-domain-resolver.service') - if firewall['geoip_sets']: - # Call helper script to Update set contents - if 'name' in firewall['geoip_sets'] or 'ipv6_name' in firewall['geoip_sets']: - if firewall['geoip_updated'] or not geoip_refresh(): - print('Updating GeoIP. Please wait...') - geoip_update(firewall) + if firewall['geoip_sets']['name'] or firewall['geoip_sets']['ipv6_name']: + if firewall['geoip_updated'] or not geoip_refresh(): + print('Updating GeoIP. Please wait...') + geoip_update(firewall=firewall, policy=firewall['policy']) return None diff --git a/src/conf_mode/policy_route.py b/src/conf_mode/policy_route.py index 480f3ecf2..3cfdad913 100755 --- a/src/conf_mode/policy_route.py +++ b/src/conf_mode/policy_route.py @@ -21,8 +21,7 @@ from sys import exit from vyos.base import Warning from vyos.config import Config -from vyos.configdict import node_changed -from vyos.configdiff import Diff +from vyos.configdiff import Diff, get_config_diff from vyos.template import render from vyos.utils.dict import dict_search_args from vyos.utils.dict import dict_search_recursive @@ -49,28 +48,15 @@ valid_groups = [ ] def geoip_updated(conf): - updated = False - - changes_v4 = node_changed(conf, ['policy', 'route'], - key_mangling=('-', '_'), - recursive=True, - expand_nodes=Diff.ADD | Diff.DELETE) - - for _, path in dict_search_recursive(changes_v4, 'geoip'): - updated = True - break - - if not updated: - changes_v6 = node_changed(conf, ['policy', 'route6'], - key_mangling=('-', '_'), - recursive=True, - expand_nodes=Diff.ADD | Diff.DELETE) - - for _, path in dict_search_recursive(changes_v6, 'geoip'): - updated = True - break - - return updated + D = get_config_diff(conf, key_mangling=('-', '_')) + for path in (['policy', 'route'], ['policy', 'route6']): + diff = D.get_child_nodes_diff(path, + expand_nodes=Diff.ADD | Diff.DELETE, + recursive=True) + if any(any(dict_search_recursive(diff.get(section, {}), 'geoip')) + for section in ('add', 'delete')): + return True + return False def geoip_sets(policy): out = {'name': [], 'ipv6_name': []} @@ -102,6 +88,9 @@ def get_config(config=None): policy['geoip_sets'] = geoip_sets(policy) policy['geoip_updated'] = geoip_updated(conf) + policy['firewall'] = conf.get_config_dict( + ['firewall'], key_mangling=('-', '_'), + no_tag_node_value_mangle=True, get_first_key=True) return policy @@ -251,12 +240,10 @@ def apply(policy): apply_table_marks(policy) - if policy['geoip_sets']: - # Call helper script to Update set contents - if 'name' in policy['geoip_sets'] or 'ipv6_name' in policy['geoip_sets']: - if policy['geoip_updated'] or not geoip_refresh(): - print('Updating GeoIP. Please wait...') - geoip_update(policy=policy) + if policy['geoip_sets']['name'] or policy['geoip_sets']['ipv6_name']: + if policy['geoip_updated'] or not geoip_refresh(): + print('Updating GeoIP. Please wait...') + geoip_update(firewall=policy['firewall'], policy=policy) return None |
