From 477cdee79a54f98eb2ac973ef38138cf417d7bfb Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 9 May 2024 22:00:19 +0200 Subject: make debian/ubuntu os release compare script much more generic --- filter_plugins/os-version.py | 76 +++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 36 deletions(-) (limited to 'filter_plugins/os-version.py') 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): -- cgit v1.2.3