summaryrefslogtreecommitdiff
path: root/python/vyos
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-05-10 21:13:08 +0200
committerGitHub <noreply@github.com>2023-05-10 21:13:08 +0200
commit6eaa327c2a3bca3924e72cf7c5736489bb76f784 (patch)
tree3dcd4adf7692682026b3290b36c96de91d46c580 /python/vyos
parent96d9bf0a88fc822b8edd78db293b7f17ae8766cf (diff)
parent8dc6b0aa8d7bbecfc5087a7406725812779eaaf6 (diff)
downloadvyos-1x-6eaa327c2a3bca3924e72cf7c5736489bb76f784.tar.gz
vyos-1x-6eaa327c2a3bca3924e72cf7c5736489bb76f784.zip
Merge pull request #1987 from dmbaturin/T5251-vrrp-group-ping
T5215: add a built-in ping check for VRRP groups
Diffstat (limited to 'python/vyos')
-rw-r--r--python/vyos/utils/dict.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/python/vyos/utils/dict.py b/python/vyos/utils/dict.py
index 66b40d92b..4afc9f54e 100644
--- a/python/vyos/utils/dict.py
+++ b/python/vyos/utils/dict.py
@@ -233,3 +233,24 @@ def dict_to_list(d, save_key_to=None):
collect.append(item)
return collect
+
+def check_mutually_exclusive_options(d, keys, required=False):
+ """ Checks if a dict has at most one or only one of
+ mutually exclusive keys.
+ """
+ present_keys = []
+
+ for k in d:
+ if k in keys:
+ present_keys.append(k)
+
+ # Un-mangle the keys to make them match CLI option syntax
+ from re import sub
+ orig_keys = list(map(lambda s: sub(r'_', '-', s), keys))
+ orig_present_keys = list(map(lambda s: sub(r'_', '-', s), present_keys))
+
+ if len(present_keys) > 1:
+ raise ValueError(f"Options {orig_keys} are mutually-exclusive but more than one of them is present: {orig_present_keys}")
+
+ if required and (len(present_keys) < 1):
+ raise ValueError(f"At least one of the following options is required: {orig_present_keys}")