| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  | #!/usr/bin/python | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | from ansible.module_utils.basic import * | 
					
						
							| 
									
										
										
										
											2018-05-22 22:08:31 +01:00
										 |  |  | from ansible.module_utils.urls import open_url | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  | import shlex | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  | import tarfile | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import os.path | 
					
						
							|  |  |  | import tempfile | 
					
						
							| 
									
										
										
										
											2019-08-31 17:41:39 +10:00
										 |  |  | import urllib.parse | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-14 11:53:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  | DOCUMENTATION = '''
 | 
					
						
							|  |  |  | --- | 
					
						
							| 
									
										
										
										
											2018-05-23 21:25:05 +01:00
										 |  |  | module: aur | 
					
						
							|  |  |  | short_description: Manage packages from the AUR | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  | description: | 
					
						
							| 
									
										
										
										
											2018-05-23 21:07:53 +01:00
										 |  |  |     - Manage packages from the Arch User Repository (AUR) | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  | author: | 
					
						
							|  |  |  |     - Kewl <xrjy@nygb.rh.bet(rot13)> | 
					
						
							|  |  |  | options: | 
					
						
							|  |  |  |     name: | 
					
						
							|  |  |  |         description: | 
					
						
							|  |  |  |             - Name or list of names of the package(s) to install or upgrade. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-23 22:28:10 -04:00
										 |  |  |     state: | 
					
						
							|  |  |  |         description: | 
					
						
							|  |  |  |             - Desired state of the package. | 
					
						
							|  |  |  |         default: present | 
					
						
							|  |  |  |         choices: [ present, latest ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  |     upgrade: | 
					
						
							|  |  |  |         description: | 
					
						
							|  |  |  |             - Whether or not to upgrade whole system. | 
					
						
							| 
									
										
										
										
											2020-05-30 19:23:23 -07:00
										 |  |  |         default: no | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  |         type: bool | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     use: | 
					
						
							|  |  |  |         description: | 
					
						
							| 
									
										
										
										
											2020-05-30 19:27:03 -07:00
										 |  |  |             - The tool to use, 'auto' uses the first known helper found and makepkg as a fallback. | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  |         default: auto | 
					
						
							| 
									
										
										
										
											2020-04-12 20:00:50 -04:00
										 |  |  |         choices: [ auto, yay, pacaur, trizen, pikaur, aurman, makepkg ] | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |     extra_args: | 
					
						
							| 
									
										
										
										
											2020-05-30 19:34:04 -07:00
										 |  |  |         description: | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |             - Arguments to pass to the tool. | 
					
						
							| 
									
										
										
										
											2020-05-30 19:34:04 -07:00
										 |  |  |               Requires that the 'use' option be set to something other than 'auto'. | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |         type: str | 
					
						
							| 
									
										
										
										
											2020-05-30 19:34:04 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  |     skip_pgp_check: | 
					
						
							|  |  |  |         description: | 
					
						
							| 
									
										
										
										
											2020-04-12 19:40:51 -04:00
										 |  |  |             - Only valid with makepkg. | 
					
						
							|  |  |  |               Skip PGP signatures verification of source file. | 
					
						
							| 
									
										
										
										
											2020-04-12 19:45:52 -04:00
										 |  |  |               This is useful when installing packages without GnuPG (properly) configured. | 
					
						
							| 
									
										
										
										
											2020-05-30 20:07:14 -07:00
										 |  |  |               Cannot be used unless use is set to 'makepkg'. | 
					
						
							| 
									
										
										
										
											2020-04-12 19:40:51 -04:00
										 |  |  |         type: bool | 
					
						
							|  |  |  |         default: no | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ignore_arch: | 
					
						
							|  |  |  |         description: | 
					
						
							|  |  |  |             - Only valid with makepkg. | 
					
						
							| 
									
										
										
										
											2020-04-12 19:45:52 -04:00
										 |  |  |               Ignore a missing or incomplete arch field, useful when the PKGBUILD does not have the arch=('yourarch') field. | 
					
						
							| 
									
										
										
										
											2020-05-30 20:07:14 -07:00
										 |  |  |               Cannot be used unless use is set to 'makepkg'. | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  |         type: bool | 
					
						
							|  |  |  |         default: no | 
					
						
							| 
									
										
										
										
											2018-07-25 21:19:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     aur_only: | 
					
						
							|  |  |  |         description: | 
					
						
							| 
									
										
										
										
											2020-05-24 10:08:21 -04:00
										 |  |  |             - Limit helper operation to the AUR. | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  |         type: bool | 
					
						
							|  |  |  |         default: no | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  | notes: | 
					
						
							|  |  |  |   - When used with a `loop:` each package will be processed individually, | 
					
						
							|  |  |  |     it is much more efficient to pass the list directly to the `name` option. | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RETURN = '''
 | 
					
						
							|  |  |  | msg: | 
					
						
							|  |  |  |     description: action that has been taken | 
					
						
							|  |  |  | helper: | 
					
						
							|  |  |  |     the helper that was actually used | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EXAMPLES = '''
 | 
					
						
							|  |  |  | - name: Install trizen using makepkg, skip if trizen is already installed | 
					
						
							| 
									
										
										
										
											2020-05-23 22:28:10 -04:00
										 |  |  |   aur: name=trizen use=makepkg state=present | 
					
						
							| 
									
										
										
										
											2018-05-23 21:01:47 +01:00
										 |  |  |   become: yes | 
					
						
							|  |  |  |   become_user: aur_builder | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-17 08:15:06 +00:00
										 |  |  | def_lang = ['env', 'LC_ALL=C'] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  | use_cmd = { | 
					
						
							| 
									
										
										
										
											2018-11-15 20:08:23 +00:00
										 |  |  |     'yay': ['yay', '-S', '--noconfirm', '--needed', '--cleanafter'], | 
					
						
							| 
									
										
										
										
											2018-05-08 07:20:00 +01:00
										 |  |  |     'pacaur': ['pacaur', '-S', '--noconfirm', '--noedit', '--needed'], | 
					
						
							|  |  |  |     'trizen': ['trizen', '-S', '--noconfirm', '--noedit', '--needed'], | 
					
						
							| 
									
										
										
										
											2018-03-17 08:15:06 +00:00
										 |  |  |     'pikaur': ['pikaur', '-S', '--noconfirm', '--noedit', '--needed'], | 
					
						
							| 
									
										
										
										
											2020-04-12 20:00:50 -04:00
										 |  |  |     'aurman': ['aurman', '-S', '--noconfirm', '--noedit', '--needed', '--skip_news', '--pgp_fetch', '--skip_new_locations'], | 
					
						
							| 
									
										
										
										
											2018-05-16 21:06:06 +02:00
										 |  |  |     'makepkg': ['makepkg', '--syncdeps', '--install', '--noconfirm', '--needed'] | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-25 21:19:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-24 10:08:21 -04:00
										 |  |  | has_aur_option = ['yay', 'pacaur', 'trizen', 'pikaur', 'aurman'] | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  | def package_installed(module, package): | 
					
						
							| 
									
										
										
										
											2018-05-16 21:30:58 +02:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Determine if the package is already installed | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     rc, _, _ = module.run_command(['pacman', '-Q', package], check_rc=False) | 
					
						
							|  |  |  |     return rc == 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  | def check_packages(module, packages): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Inform the user what would change if the module were run | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     would_be_changed = [] | 
					
						
							| 
									
										
										
										
											2020-05-10 14:31:49 +02:00
										 |  |  |     diff = { | 
					
						
							|  |  |  |         'before': '', | 
					
						
							|  |  |  |         'after': '', | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     for package in packages: | 
					
						
							|  |  |  |         installed = package_installed(module, package) | 
					
						
							|  |  |  |         if not installed: | 
					
						
							|  |  |  |             would_be_changed.append(package) | 
					
						
							| 
									
										
										
										
											2020-05-10 14:31:49 +02:00
										 |  |  |             if module._diff: | 
					
						
							|  |  |  |                 diff['after'] += package + "\n" | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if would_be_changed: | 
					
						
							|  |  |  |         status = True | 
					
						
							| 
									
										
										
										
											2019-04-11 19:59:22 +01:00
										 |  |  |         if len(packages) > 1: | 
					
						
							|  |  |  |             message = '{} package(s) would be installed'.format(len(would_be_changed)) | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  |         else: | 
					
						
							|  |  |  |             message = 'package would be installed' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         status = False | 
					
						
							| 
									
										
										
										
											2019-04-11 19:59:22 +01:00
										 |  |  |         if len(packages) > 1: | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  |             message = 'all packages are already installed' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             message = 'package is already installed' | 
					
						
							| 
									
										
										
										
											2020-05-10 14:31:49 +02:00
										 |  |  |     module.exit_json(changed=status, msg=message, diff=diff) | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 21:06:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  | def install_with_makepkg(module, package, extra_args, skip_pgp_check, ignore_arch): | 
					
						
							| 
									
										
										
										
											2018-05-16 21:30:58 +02:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Install the specified package with makepkg | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2018-10-30 16:50:07 +01:00
										 |  |  |     module.get_bin_path('fakeroot', required=True) | 
					
						
							| 
									
										
										
										
											2019-08-31 17:41:39 +10:00
										 |  |  |     f = open_url('https://aur.archlinux.org/rpc/?v=5&type=info&arg={}'.format(urllib.parse.quote(package))) | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     result = json.loads(f.read().decode('utf8')) | 
					
						
							|  |  |  |     if result['resultcount'] != 1: | 
					
						
							| 
									
										
										
										
											2019-04-11 19:05:57 +01:00
										 |  |  |         return (1, '', 'package {} not found'.format(package)) | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     result = result['results'][0] | 
					
						
							| 
									
										
										
										
											2018-05-22 22:08:31 +01:00
										 |  |  |     f = open_url('https://aur.archlinux.org/{}'.format(result['URLPath'])) | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     with tempfile.TemporaryDirectory() as tmpdir: | 
					
						
							| 
									
										
										
										
											2020-05-09 16:19:12 +02:00
										 |  |  |         tar = tarfile.open(mode='r|*', fileobj=f) | 
					
						
							|  |  |  |         tar.extractall(tmpdir) | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |         tar.close() | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |         command = build_command_prefix('makepkg', extra_args, skip_pgp_check=skip_pgp_check, ignore_arch=ignore_arch) | 
					
						
							| 
									
										
										
										
											2020-05-31 08:33:28 -07:00
										 |  |  |         rc, out, err = module.run_command(command, cwd=os.path.join(tmpdir, result['Name']), check_rc=True) | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     return (rc, out, err) | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  | def build_command_prefix(use, extra_args, skip_pgp_check=False, ignore_arch=False, aur_only=False): | 
					
						
							| 
									
										
										
										
											2020-05-30 10:11:06 -07:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Create the prefix of a command that can be used by the install and upgrade functions. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     command = def_lang + use_cmd[use] | 
					
						
							| 
									
										
										
										
											2020-05-31 08:33:28 -07:00
										 |  |  |     if skip_pgp_check: | 
					
						
							|  |  |  |         command.append('--skippgpcheck') | 
					
						
							|  |  |  |     if ignore_arch: | 
					
						
							|  |  |  |         command.append('--ignorearch') | 
					
						
							| 
									
										
										
										
											2020-05-30 10:11:06 -07:00
										 |  |  |     if (aur_only and use in has_aur_option): | 
					
						
							|  |  |  |         command.append('--aur') | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |     if extra_args: | 
					
						
							|  |  |  |         command += shlex.split(extra_args) | 
					
						
							| 
									
										
										
										
											2020-05-30 10:11:06 -07:00
										 |  |  |     return command | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  | def upgrade(module, use, extra_args, aur_only): | 
					
						
							| 
									
										
										
										
											2018-05-16 21:30:58 +02:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Upgrade the whole system | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     assert use in use_cmd | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |     command = build_command_prefix(use, extra_args, aur_only=aur_only) | 
					
						
							| 
									
										
										
										
											2020-05-30 10:11:06 -07:00
										 |  |  |     command.append('-u') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     rc, out, err = module.run_command(command, check_rc=True) | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     module.exit_json( | 
					
						
							| 
									
										
										
										
											2018-04-14 11:37:11 +01:00
										 |  |  |         changed=not (out == '' or 'nothing to do' in out or 'No AUR updates found' in out), | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |         msg='upgraded system', | 
					
						
							| 
									
										
										
										
											2018-05-16 21:29:17 +02:00
										 |  |  |         helper=use, | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  | def install_packages(module, packages, use, extra_args, state, skip_pgp_check, ignore_arch, aur_only): | 
					
						
							| 
									
										
										
										
											2018-05-16 21:30:58 +02:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Install the specified packages | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     assert use in use_cmd | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 21:05:07 +01:00
										 |  |  |     changed_iter = False | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |     for package in packages: | 
					
						
							| 
									
										
										
										
											2020-05-23 22:44:58 -04:00
										 |  |  |         if state == 'present': | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |             if package_installed(module, package): | 
					
						
							|  |  |  |                 rc = 0 | 
					
						
							|  |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2018-05-16 21:06:06 +02:00
										 |  |  |         if use == 'makepkg': | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |             rc, out, err = install_with_makepkg(module, package, extra_args, skip_pgp_check, ignore_arch) | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |             command = build_command_prefix(use, extra_args, aur_only=aur_only) | 
					
						
							| 
									
										
										
										
											2020-05-30 10:11:06 -07:00
										 |  |  |             command.append(package) | 
					
						
							|  |  |  |             rc, out, err = module.run_command(command, check_rc=True) | 
					
						
							| 
									
										
										
										
											2018-05-16 21:29:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-14 11:37:11 +01:00
										 |  |  |         changed_iter = changed_iter or not (out == '' or '-- skipping' in out or 'nothing to do' in out) | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-11 20:03:55 +01:00
										 |  |  |     message = 'installed package(s)' if changed_iter else 'package(s) already installed' | 
					
						
							| 
									
										
										
										
											2018-05-16 21:29:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |     module.exit_json( | 
					
						
							| 
									
										
										
										
											2017-12-23 21:05:07 +01:00
										 |  |  |         changed=changed_iter, | 
					
						
							| 
									
										
										
										
											2018-05-16 21:29:17 +02:00
										 |  |  |         msg=message if not rc else err, | 
					
						
							|  |  |  |         helper=use, | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |         rc=rc, | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-30 11:57:56 -07:00
										 |  |  | def make_module(): | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |     module = AnsibleModule( | 
					
						
							|  |  |  |         argument_spec={ | 
					
						
							|  |  |  |             'name': { | 
					
						
							| 
									
										
										
										
											2017-12-23 21:05:07 +01:00
										 |  |  |                 'type': 'list', | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2020-05-23 22:28:10 -04:00
										 |  |  |             'state': { | 
					
						
							|  |  |  |                 'default': 'present', | 
					
						
							|  |  |  |                 'choices': ['present', 'latest'], | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |             'upgrade': { | 
					
						
							|  |  |  |                 'type': 'bool', | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2017-12-24 08:21:11 +01:00
										 |  |  |             'use': { | 
					
						
							|  |  |  |                 'default': 'auto', | 
					
						
							| 
									
										
										
										
											2019-04-11 19:39:01 +01:00
										 |  |  |                 'choices': ['auto'] + list(use_cmd.keys()), | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |             'extra_args': { | 
					
						
							|  |  |  |                 'default': None, | 
					
						
							|  |  |  |                 'type': 'str', | 
					
						
							| 
									
										
										
										
											2020-05-30 19:34:04 -07:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2018-05-16 21:20:30 +02:00
										 |  |  |             'skip_pgp_check': { | 
					
						
							|  |  |  |                 'default': False, | 
					
						
							|  |  |  |                 'type': 'bool', | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  |             'ignore_arch': { | 
					
						
							|  |  |  |                 'default': False, | 
					
						
							|  |  |  |                 'type': 'bool', | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2018-07-25 21:19:02 +01:00
										 |  |  |             'aur_only': { | 
					
						
							|  |  |  |                 'default': False, | 
					
						
							|  |  |  |                 'type': 'bool', | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  |         mutually_exclusive=[['name', 'upgrade']], | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |         required_one_of=[['name', 'upgrade']], | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |         required_by={'use': ['extra_args', 'skip_pgp_check', 'ignore_arch']}, | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  |         supports_check_mode=True | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     params = module.params | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |     if params['use'] == 'auto' and params['extra_args'] is not None: | 
					
						
							|  |  |  |         module.fail_json(msg="You must specify a tool other than 'auto' to use the 'extra_args' option.") | 
					
						
							| 
									
										
										
										
											2020-05-30 19:34:04 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  |     if params['use'] != 'makepkg' and params['skip_pgp_check']: | 
					
						
							|  |  |  |         module.fail_json(msg="You must use 'makepkg' to use the 'skip_pgp_check' option.") | 
					
						
							|  |  |  |     if params['use'] != 'makepkg' and params['ignore_arch']: | 
					
						
							|  |  |  |         module.fail_json(msg="You must use 'makepkg' to use the 'ignore_arch' option.") | 
					
						
							| 
									
										
										
										
											2018-05-16 20:39:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-24 08:21:11 +01:00
										 |  |  |     if params['use'] == 'auto': | 
					
						
							| 
									
										
										
										
											2018-05-16 21:06:06 +02:00
										 |  |  |         use = 'makepkg' | 
					
						
							| 
									
										
										
										
											2018-05-08 07:20:00 +01:00
										 |  |  |         # auto: select the first helper for which the bin is found | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |         for k in use_cmd: | 
					
						
							| 
									
										
										
										
											2019-04-11 20:09:27 +01:00
										 |  |  |             if module.get_bin_path(k): | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |                 use = k | 
					
						
							| 
									
										
										
										
											2017-12-24 08:21:11 +01:00
										 |  |  |                 break | 
					
						
							|  |  |  |     else: | 
					
						
							| 
									
										
										
										
											2017-12-31 18:12:28 +01:00
										 |  |  |         use = params['use'] | 
					
						
							| 
									
										
										
										
											2017-12-24 08:21:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  |     if params.get('upgrade', False) and use == 'makepkg': | 
					
						
							| 
									
										
										
										
											2020-05-30 19:27:03 -07:00
										 |  |  |         module.fail_json(msg="Upgrade cannot be used with the tool 'makepkg'.") | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-30 11:57:56 -07:00
										 |  |  |     return module, use | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def apply_module(module, use): | 
					
						
							|  |  |  |     params = module.params | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-30 10:10:01 -07:00
										 |  |  |     if module.check_mode: | 
					
						
							|  |  |  |         check_packages(module, params['name']) | 
					
						
							|  |  |  |     elif params.get('upgrade', False): | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |         upgrade(module, use, params['extra_args'], params['aur_only']) | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2020-05-31 09:52:09 -07:00
										 |  |  |         install_packages(module, params['name'], use, params['extra_args'], params['state'], params['skip_pgp_check'], params['ignore_arch'], params['aur_only']) | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-30 11:57:56 -07:00
										 |  |  | def main(): | 
					
						
							|  |  |  |     module, use = make_module() | 
					
						
							|  |  |  |     apply_module(module, use) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 18:27:42 +01:00
										 |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     main() |