From b41eb5744e985aa04a4e97d02f6972803e0c7571 Mon Sep 17 00:00:00 2001 From: Stanislav Shamilov Date: Sat, 7 Dec 2024 16:24:58 +0200 Subject: [PATCH] adds channel parameter --- plugins/module_utils/sdkmanager.py | 27 ++++++++++++++++--- plugins/modules/android_sdk.py | 7 ++++- .../targets/android_sdk/handlers/main.yml | 4 +++ .../targets/android_sdk/tasks/main.yml | 11 +++++++- 4 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 tests/integration/targets/android_sdk/handlers/main.yml diff --git a/plugins/module_utils/sdkmanager.py b/plugins/module_utils/sdkmanager.py index 88e4b5c07b..60b2b63afd 100644 --- a/plugins/module_utils/sdkmanager.py +++ b/plugins/module_utils/sdkmanager.py @@ -1,3 +1,7 @@ +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + import re from ansible_collections.community.general.plugins.module_utils import cmd_runner_fmt @@ -8,6 +12,20 @@ _state_map = { "absent": "--uninstall" } +# sdkmanager --help 2>&1 | grep -A 2 -- --channel +_channel_map = { + "stable": 0, + "beta": 1, + "dev": 2, + "canary": 3 +} + + +def map_channel(channel_name): + if channel_name not in _channel_map: + raise ValueError("Unknown channel name '%s'" % channel_name) + return _channel_map[channel_name] + def sdkmanager_runner(module, **kwargs): return CmdRunner( @@ -20,7 +38,8 @@ def sdkmanager_runner(module, **kwargs): installed=cmd_runner_fmt.as_fixed("--list_installed"), list=cmd_runner_fmt.as_fixed('--list'), newer=cmd_runner_fmt.as_fixed("--newer"), - sdk_root=cmd_runner_fmt.as_opt_eq_val("--sdk_root", ignore_none=True) + sdk_root=cmd_runner_fmt.as_opt_eq_val("--sdk_root", ignore_none=True), + channel=cmd_runner_fmt.as_func(lambda x: ["{0}={1}".format("--channel", map_channel(x))]) ), force_lang="C.UTF-8", **kwargs @@ -62,7 +81,7 @@ class AndroidSdkManager(object): self.runner = runner def get_installed_packages(self): - with self.runner('installed sdk_root') as ctx: + with self.runner('installed sdk_root channel') as ctx: rc, stdout, stderr = ctx.run() data = stdout.split('\n') @@ -90,7 +109,7 @@ class AndroidSdkManager(object): return packages def get_updatable_packages(self): - with self.runner('list newer sdk_root') as ctx: + with self.runner('list newer sdk_root channel') as ctx: rc, stdout, stderr = ctx.run() data = stdout.split('\n') @@ -130,5 +149,5 @@ class AndroidSdkManager(object): if len(packages) == 0: return 0, '', '' command_arg = [x.name for x in packages] - with self.runner('state name sdk_root') as ctx: + with self.runner('state name sdk_root channel') as ctx: return ctx.run(name=command_arg, state=state) diff --git a/plugins/modules/android_sdk.py b/plugins/modules/android_sdk.py index 4e4130a3cf..51ce2702bd 100644 --- a/plugins/modules/android_sdk.py +++ b/plugins/modules/android_sdk.py @@ -1,3 +1,7 @@ +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + 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, Package, \ AndroidSdkManager @@ -9,7 +13,8 @@ class AndroidSdk(StateModuleHelper): state=dict(type='str', default='present', choices=['present', 'absent', 'latest']), package=dict(type='list', elements='str', aliases=['pkg', 'name']), update=dict(type='bool', default=False), - sdk_root=dict(type='path') + sdk_root=dict(type='path'), + channel=dict(type='str', default='stable', choices=['stable', 'beta', 'dev', 'canary']) ), supports_check_mode=True ) diff --git a/tests/integration/targets/android_sdk/handlers/main.yml b/tests/integration/targets/android_sdk/handlers/main.yml new file mode 100644 index 0000000000..6a9dc69696 --- /dev/null +++ b/tests/integration/targets/android_sdk/handlers/main.yml @@ -0,0 +1,4 @@ +- name: delete_newroot + file: + path: "{{ newroot.path }}" + state: absent \ No newline at end of file diff --git a/tests/integration/targets/android_sdk/tasks/main.yml b/tests/integration/targets/android_sdk/tasks/main.yml index bf7d1de31e..2f28244358 100644 --- a/tests/integration/targets/android_sdk/tasks/main.yml +++ b/tests/integration/targets/android_sdk/tasks/main.yml @@ -62,6 +62,7 @@ path: "{{ ansible_env.HOME }}/newroot" state: directory register: newroot + notify: delete_newroot - name: Accept licenses in the new root shell: "yes | sdkmanager --sdk_root={{ newroot.path }} --licenses" @@ -78,6 +79,13 @@ path: "{{ newroot.path }}/build-tools/34.0.0" register: new_root_package_stat + - name: Install a package from canary channel + android_sdk: + name: build-tools;33.0.0 + state: present + channel: canary + register: package_canary + - name: Run tests assert: that: @@ -89,4 +97,5 @@ - not platform_tools_present.changed - platform_tools_updated.changed - new_root_package.changed - - new_root_package_stat.stat.exists \ No newline at end of file + - new_root_package_stat.stat.exists + - package_canary.changed \ No newline at end of file