summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/firewall.py34
-rwxr-xr-xsrc/conf_mode/policy_route.py47
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