diff --git a/plugins/module_utils/sdkmanager.py b/plugins/module_utils/sdkmanager.py new file mode 100644 index 0000000000..96b94e5eb3 --- /dev/null +++ b/plugins/module_utils/sdkmanager.py @@ -0,0 +1,18 @@ +from ansible_collections.community.general.plugins.module_utils import cmd_runner_fmt +from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner + +_state_map = { + "present": "--install", + "absent": "--uninstall" +} + + +def sdkmanager_runner(module, **kwargs): + return CmdRunner( + module, + command='sdkmanager', + arg_formats=dict( + state=cmd_runner_fmt.as_map(_state_map), + name=cmd_runner_fmt.as_list() + ) + ) diff --git a/plugins/modules/android_sdk.py b/plugins/modules/android_sdk.py new file mode 100644 index 0000000000..0466116f3f --- /dev/null +++ b/plugins/modules/android_sdk.py @@ -0,0 +1,58 @@ +import re + +from ansible_collections.community.general.plugins.module_utils.mh.module_helper import StateModuleHelper +from ansible_collections.community.general.plugins.module_utils.sdkmanager import sdkmanager_runner + + +class AndroidSdk(StateModuleHelper): + module = dict( + argument_spec=dict( + state=dict(type='str', default='present', choices=['present', 'absent', 'latest']), + package=dict(type='list', elements='str', aliases=['pkg', 'name']) + ) + ) + use_old_vardict = False + + def _get_formatted_packages(self): + arg_pkgs = self.vars.package + packages = [] + for arg_pkg in arg_pkgs: + pkg, version = package_split(arg_pkg) + fmt_pkg = format_cmdline_package(pkg, version) + packages.append(fmt_pkg) + return packages + + def state_present(self): + packages = self._get_formatted_packages() + with self.sdkmanager('state name') as ctx: + ctx.run(name=packages) + + def state_absent(self): + packages = self._get_formatted_packages() + with self.sdkmanager('state name') as ctx: + ctx.run(name=packages) + + def __init_module__(self): + self.sdkmanager = sdkmanager_runner(self.module) + + +def format_cmdline_package(package, version): + if version is None: + return package + else: + return "%s;%s" % (package, version) + + +def package_split(package): + parts = re.split(r'=', package, maxsplit=1) + if len(parts) > 1: + return parts + return parts[0], None + + +def main(): + AndroidSdk.execute() + + +if __name__ == '__main__': + main()