From 744bb4840ed16ecb340479c44d8962f30b109fe2 Mon Sep 17 00:00:00 2001 From: anon8675309 Date: Thu, 6 Feb 2025 09:44:14 -0600 Subject: [PATCH] fixed filter plugins that are used by submodules but not available --- filter_plugins/utils.py | 64 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 filter_plugins/utils.py diff --git a/filter_plugins/utils.py b/filter_plugins/utils.py new file mode 100644 index 0000000..48325d1 --- /dev/null +++ b/filter_plugins/utils.py @@ -0,0 +1,64 @@ +from re import sub as regex_replace + + +class FilterModule(object): + + def filters(self): + return { + "safe_key": self.safe_key, + "all_true": self.all_true, + "prepare_letsencrypt": self.prepare_letsencrypt, + "ensure_list": self.ensure_list, + "enmod_list": self.enmod_list, + "mod_list": self.mod_list, + "mgmt_pwd": self.mgmt_pwd, + } + + @staticmethod + def safe_key(key: str) -> str: + return regex_replace(r'[^0-9a-zA-Z\.]+', '', key.replace(' ', '_')) + + @staticmethod + def all_true(data: list) -> bool: + return all(data) + + @staticmethod + def prepare_letsencrypt(site: dict, name: str) -> dict: + domains = [site['domain']] + domains.extend(site['aliases']) + return { + name: { + 'domains': domains, + 'key_size': site['letsencrypt']['key_size'], + 'email': site['letsencrypt']['email'], + 'state': site['state'], + } + } + + @classmethod + def enmod_list(cls, present: list, absent: list) -> str: + absent_list = cls.ensure_list(absent) + return ' '.join([mod for mod in cls.ensure_list(present) if mod not in absent_list]) + + @classmethod + def mod_list(cls, mods: (str, list)) -> str: + return ' '.join(cls.ensure_list(mods)) + + @staticmethod + def ensure_list(data: (str, list)) -> list: + # if user supplied a string instead of a list => convert it to match our expectations + if isinstance(data, list): + return data + + return [data] + + def mgmt_pwd(self, instance: dict) -> str: + return self.fallback(opt1=instance['ansible_pwd'], opt2=instance['root_pwd']) + + @staticmethod + def fallback(opt1: str, opt2: str) -> str: + if opt1 not in [None, '', 'None', 'none', ' ']: + return opt1 + + return opt2 +