summaryrefslogtreecommitdiff
path: root/filter_plugins
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2024-05-09 22:00:19 +0200
committerChristian Pointner <equinox@spreadspace.org>2024-05-09 22:00:19 +0200
commit477cdee79a54f98eb2ac973ef38138cf417d7bfb (patch)
treec25b833071c69c7b7cc262111240f130018cbc92 /filter_plugins
parentsome more fixes for ubuntu-installer (diff)
make debian/ubuntu os release compare script much more generic
Diffstat (limited to 'filter_plugins')
-rw-r--r--filter_plugins/os-version.py76
1 files changed, 40 insertions, 36 deletions
diff --git a/filter_plugins/os-version.py b/filter_plugins/os-version.py
index 4c5c3a29..6158353f 100644
--- a/filter_plugins/os-version.py
+++ b/filter_plugins/os-version.py
@@ -2,6 +2,23 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible import errors
+import operator
+
+_operator_map_ = {
+ "==": operator.eq,
+ "<": operator.lt,
+ "<=": operator.le,
+ ">": operator.gt,
+ ">=": operator.ge,
+}
+
+
+def _get_operator(op):
+ try:
+ return _operator_map_[op]
+ except KeyError as e:
+ raise errors.AnsibleFilterError("unknown operator: %s, must be one of: %s" % (str(e), ', '.join(list(_operator_map_))))
+
_ubuntu_release_names_ = {
"focal": 2004,
@@ -16,6 +33,14 @@ _ubuntu_release_names_ = {
"oracular": 2410,
}
+
+def _get_ubuntu_version(v):
+ try:
+ return _ubuntu_release_names_[v]
+ except KeyError as e:
+ raise errors.AnsibleFilterError("unknown ubuntu release: %s" % str(e))
+
+
_debian_release_names_ = {
"buster": 10,
"bullseye": 11,
@@ -25,58 +50,37 @@ _debian_release_names_ = {
}
-def ubuntu_release_after(a, b):
+def _get_debian_version(v):
try:
- av = _ubuntu_release_names_[a]
- bv = _ubuntu_release_names_[b]
- return (av > bv)
+ return _debian_release_names_[v]
except KeyError as e:
- raise errors.AnsibleFilterError("unknown ubuntu release: %s" % str(e))
- except Exception as e:
- raise errors.AnsibleFilterError("ubuntu_release_after(): %s" % str(e))
-
-
-def ubuntu_release_before(a, b):
- try:
- av = _ubuntu_release_names_[a]
- bv = _ubuntu_release_names_[b]
- return (av < bv)
- except KeyError as e:
- raise errors.AnsibleFilterError("unknown ubuntu release: %s" % str(e))
- except Exception as e:
- raise errors.AnsibleFilterError("ubuntu_release_before(): %s" % str(e))
+ raise errors.AnsibleFilterError("unknown debian release: %s" % str(e))
-def debian_release_after(a, b):
+def ubuntu_release_compare(a, op, b):
try:
- av = _debian_release_names_[a]
- bv = _debian_release_names_[b]
- return (av > bv)
- except KeyError as e:
- raise errors.AnsibleFilterError("unknown debian release: %s" % str(e))
+ av = _get_ubuntu_version(a)
+ bv = _get_ubuntu_version(b)
+ return _get_operator(op)(av, bv)
except Exception as e:
- raise errors.AnsibleFilterError("debian_release_after(): %s" % str(e))
+ raise errors.AnsibleFilterError("ubuntu_release_compare(): %s" % str(e))
-def debian_release_before(a, b):
+def debian_release_compare(a, op, b):
try:
- av = _debian_release_names_[a]
- bv = _debian_release_names_[b]
- return (av < bv)
- except KeyError as e:
- raise errors.AnsibleFilterError("unknown debian release: %s" % str(e))
+ av = _get_debian_version(a)
+ bv = _get_debian_version(b)
+ return _get_operator(op)(av, bv)
except Exception as e:
- raise errors.AnsibleFilterError("debian_release_before(): %s" % str(e))
+ raise errors.AnsibleFilterError("debian_release_compare(): %s" % str(e))
class FilterModule(object):
''' os version compare '''
filter_map = {
- 'ubuntu_release_after': ubuntu_release_after,
- 'ubuntu_release_before': ubuntu_release_before,
- 'debian_release_after': debian_release_after,
- 'debian_release_before': debian_release_before,
+ 'ubuntu_release_compare': ubuntu_release_compare,
+ 'debian_release_compare': debian_release_compare,
}
def filters(self):