From ec674cdcbb2e7c58795c61dbe43a143acbd25071 Mon Sep 17 00:00:00 2001 From: Stanislav Shamilov Date: Thu, 28 Nov 2024 16:59:29 +0200 Subject: [PATCH] adds simple installed packages parsing --- plugins/module_utils/sdkmanager.py | 4 +++- plugins/modules/android_sdk.py | 31 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/plugins/module_utils/sdkmanager.py b/plugins/module_utils/sdkmanager.py index 2e66a1e2de..04d35f044e 100644 --- a/plugins/module_utils/sdkmanager.py +++ b/plugins/module_utils/sdkmanager.py @@ -14,6 +14,8 @@ def sdkmanager_runner(module, **kwargs): arg_formats=dict( state=cmd_runner_fmt.as_map(_state_map), name=cmd_runner_fmt.as_list(), - update=cmd_runner_fmt.as_bool("--update") + update=cmd_runner_fmt.as_fixed("--update"), + installed=cmd_runner_fmt.as_fixed("--list_installed") ), + **kwargs ) diff --git a/plugins/modules/android_sdk.py b/plugins/modules/android_sdk.py index e5a33455b7..5456695f2e 100644 --- a/plugins/modules/android_sdk.py +++ b/plugins/modules/android_sdk.py @@ -5,6 +5,8 @@ from ansible_collections.community.general.plugins.module_utils.sdkmanager impor class AndroidSdk(StateModuleHelper): + _RE_INSTALLED_PACKAGES_HEADER = re.compile(r'^\s+Path\s+|\s+Version\s+|\s+Description\s+|\s+Location\s+$') + _RE_INSTALLED_PACKAGES = re.compile(r'^\s+(\S+)\s+\|\s+(\S+)\s+\|\s(.+)\s\|\s+(\S+)$') module = dict( argument_spec=dict( state=dict(type='str', default='present', choices=['present', 'absent', 'latest']), @@ -13,6 +15,7 @@ class AndroidSdk(StateModuleHelper): ) ) use_old_vardict = False + output_params = ('installed') def _get_formatted_packages(self): arg_pkgs = self.vars.package @@ -23,8 +26,36 @@ class AndroidSdk(StateModuleHelper): packages.append(fmt_pkg) return packages + def _get_installed_packages(self): + with self.sdkmanager('installed') as ctx: + rc, stdout, stderr = ctx.run() + + packages = [] + data = stdout.split('\n') + + lines_count = len(data) + + i = 0 + + while i < lines_count: + line = data[i] + if self._RE_INSTALLED_PACKAGES_HEADER.match(line): + i += 1 + else: + p = self._RE_INSTALLED_PACKAGES.search(line) + if p: + name = p.group(1) + version = p.group(2) + description = p.group(3) + packages.append((name, version, description)) + i += 1 + return packages + def __state_fallback__(self): packages = self._get_formatted_packages() + + installed = self._get_installed_packages() + self.vars.installed = installed with self.sdkmanager('state name') as ctx: ctx.run(name=packages)