36 Commits
v0.21 ... v0.26

Author SHA1 Message Date
kewl
dff3cfb450 Merge pull request #36 from juergenhoetzel/diff
Add diff support in check mode
2020-05-10 08:42:43 -04:00
Juergen Hoetzel
89e26748da Add diff support in check mode 2020-05-10 14:31:49 +02:00
kewl
de92aa87cb Merge pull request #34 from juergenhoetzel/on-the-fly-extract
Extract tar file on-the-fly
2020-05-09 10:40:18 -04:00
Juergen Hoetzel
5d952d26fd Extract tar file on-the-fly
Instead of creating an intermediate tar file use the open_url response
as fileobj.
2020-05-09 16:19:12 +02:00
kewl fft
026786beb0 deprioritize aurman - discontinued 2020-04-12 20:00:50 -04:00
kewl fft
c24454a159 readme minor improvements 2020-04-12 19:45:52 -04:00
kewl fft
63e60fc256 add comments for ignore_arch 2020-04-12 19:40:51 -04:00
kewl
e643e8f450 Merge pull request #30 from neilmunday/master
Added ignore_arch option for makepkg
2020-04-12 19:24:49 -04:00
neilmunday
bd374b15d9 Added ignore_arch option for makepkg 2020-04-13 00:05:35 +01:00
kewl fft
d6d25c6738 readme update 2020-03-03 07:26:29 -05:00
kewl
672b060fe9 Merge pull request #29 from pallxk/embed-module-in-role
Embed module in role
2020-03-02 20:54:00 -05:00
pallxk
c26e14c8ce Update README for installation via Ansible Galaxy 2020-03-02 13:43:56 +08:00
pallxk
74b538db28 Embed module in role 2020-02-28 11:23:41 +08:00
kewl
9f52f507c6 Merge pull request #25 from hvariant/fix-package-name-quote
fix quoting of package name
2019-08-31 09:02:49 +01:00
Zhansong Li
e1443632a3 use the correct module and function name 2019-08-31 17:41:39 +10:00
Zhansong Li
f4868a5bac fix quoting of package name 2019-08-31 11:17:57 +10:00
kewl fft
9a2500338c improved readme 2019-07-28 09:30:00 +02:00
kewl fft
5acabdc819 optional argument default for get bin path removed 2019-04-11 20:09:27 +01:00
kewl fft
2766c2661c if in one line 2019-04-11 20:03:55 +01:00
kewl fft
473d06fe54 revert grammatical correction 2019-04-11 19:59:22 +01:00
kewl fft
59d69056a2 grammatical correction always many packages at this point 2019-04-11 19:45:03 +01:00
kewl fft
8b1ba99cdc choices list is now dynamic 2019-04-11 19:39:01 +01:00
kewl fft
72d432ac7a yaourt remove from choices 2019-04-11 19:17:36 +01:00
kewl fft
b462d9893f improved error message when pkg not found thanks @juergenhoetzel 2019-04-11 19:05:57 +01:00
kewl fft
8f8af5fa5f correct package name in readme 2018-12-21 08:33:16 +00:00
kewl fft
6ee60c77bb yay afterclean added 2018-11-15 20:08:23 +00:00
kewl
eeca05b629 Merge pull request #21 from juergenhoetzel/check-for-fakeroot
makepkg: Check for "fakeroot" binary
2018-10-30 19:18:28 +00:00
Juergen Hoetzel
f92a1522a3 makepkg: Check for "fakeroot" binary 2018-10-30 16:50:07 +01:00
kewl fft
6f5a4f9b6d yay positionned #1 and comments refreshed 2018-10-13 12:01:48 +01:00
kewl
85f6d7c93f Merge pull request #19 from visibilityspots/master
Feature: use the skip_new_locations option for aurman wrapper
2018-08-21 21:18:42 +01:00
Jan Collijs
80279644a8 Feature: use the skip_new_locations option for aurman wrapper 2018-08-21 11:42:38 +02:00
kewl fft
3901eb7368 aur_only param added 2018-07-25 21:19:02 +01:00
kewl
9772b680dd Merge pull request #15 from visibilityspots/master
Aurman feature: fetch new pgp keys without interaction
2018-07-24 14:21:01 +01:00
Jan Collijs
349e237307 Aurman feature: fetch new pgp keys without interaction 2018-07-24 10:40:52 +02:00
kewl
3ebf634913 Merge pull request #14 from gliech/master
Skip the archlinux.org news in aurman
2018-07-17 11:11:37 +01:00
Der Gliech
5b4dd96294 added '--skip_news' to the options for aurman 2018-07-17 10:23:03 +02:00
3 changed files with 113 additions and 46 deletions

View File

@@ -1,14 +1,14 @@
# Ansible AUR helper # Ansible AUR helper
Ansible module to use some Arch User Repository (AUR) helpers as well as makepkg. Ansible module to use some Arch User Repository (AUR) helpers as well as makepkg.
The following helpers are supported and automatically selected in the order they are listed: The following helpers are supported and automatically selected, if present, in the order listed below:
- [aurman](https://github.com/polygamma/aurman)
- [yay](https://github.com/Jguer/yay) - [yay](https://github.com/Jguer/yay)
- [pacaur](https://github.com/rmarquis/pacaur) - [pacaur](https://github.com/E5ten/pacaur)
- [trizen](https://github.com/trizen/trizen) - [trizen](https://github.com/trizen/trizen)
- [pikaur](https://github.com/actionless/pikaur) - [pikaur](https://github.com/actionless/pikaur)
- [aurman](https://github.com/polygamma/aurman) (discontinued)
makepkg will be used if no helper was found or if it's specified explicitly. *makepkg* will be used if no helper was found or if it is explicitly specified:
- [makepkg](https://wiki.archlinux.org/index.php/makepkg) - [makepkg](https://wiki.archlinux.org/index.php/makepkg)
## Options ## Options
@@ -16,9 +16,11 @@ makepkg will be used if no helper was found or if it's specified explicitly.
|--- |--- |--- |--- |---| |--- |--- |--- |--- |---|
|name |no | | |Name or list of names of the package(s) to install or upgrade.| |name |no | | |Name or list of names of the package(s) to install or upgrade.|
|upgrade |no |no |yes, no |Whether or not to upgrade whole system.| |upgrade |no |no |yes, no |Whether or not to upgrade whole system.|
|use |no |auto |auto, aurman, yay, pacaur, trizen, pikaur, makepkg |The helper to use, 'auto' uses the first known helper found and makepkg as a fallback.| |use |no |auto |auto, yay, pacaur, trizen, pikaur, aurman, makepkg |The helper to use, 'auto' uses the first known helper found and makepkg as a fallback.|
|skip_installed |no |no |yes, no |Skip operations if the package is present.| |skip_installed |no |no |yes, no |Skip operations if the package is present.|
|skip_pgp_check |no |no |yes, no |Skip verification of PGP signatures. This is useful when installing packages on a host without GnuPG (properly) configured. Only valid with makepkg.| |aur_only |no |no |yes, no |Limit operation to the AUR. Compatible with yay, pacaur, aurman and trizen.|
|skip_pgp_check |no |no |yes, no |Only valid with makepkg. Skip PGP signatures verification of source file, useful when installing packages without GnuPG properly configured.|
|ignore_arch |no |no |yes, no |Only valid with makepkg. Ignore a missing or incomplete arch field, useful when the PKGBUILD does not have the arch=('yourarch') field.|
### Note ### Note
* Either *name* or *upgrade* is required, both cannot be used together. * Either *name* or *upgrade* is required, both cannot be used together.
@@ -27,7 +29,7 @@ makepkg will be used if no helper was found or if it's specified explicitly.
## Installing ## Installing
### AUR package ### AUR package
The [aur-ansible-git](https://aur.archlinux.org/packages/ansible-aur-git) package is available in the AUR. The [ansible-aur-git](https://aur.archlinux.org/packages/ansible-aur-git) package is available in the AUR.
Note the module is installed in `/usr/share/ansible/plugins/modules` which is one of the default module library paths. Note the module is installed in `/usr/share/ansible/plugins/modules` which is one of the default module library paths.
### Manual installation ### Manual installation
@@ -36,10 +38,38 @@ Just clone the *ansible-aur* repository into your user custom-module directory:
git clone https://github.com/kewlfft/ansible-aur.git ~/.ansible/plugins/modules/aur git clone https://github.com/kewlfft/ansible-aur.git ~/.ansible/plugins/modules/aur
``` ```
### Ansible Galaxy
*ansible-aur* is available in Galaxy which is a hub for sharing Ansible content. To download it, use:
```
ansible-galaxy install kewlfft.aur
```
Note that if this module is installed from Ansible Galaxy, you will need to list it explicitly in your playbook:
```
# playbook.yml
- hosts: localhost
roles:
- kewlfft.aur
tasks:
- aur: name=package_name
```
or in your role:
```
# meta/main.yml
dependencies:
- kewlfft.aur
```
```
# tasks/main.yml
- aur: name=package_name
```
## Usage ## Usage
### Note ### Notes
* This module aims to cover the AUR, for package removal or system upgrade with the repositories, it is recommended to use the official *pacman* module, * The scope of this module is installation and update from the AUR; for package removal or system upgrade from the official repositories, it is recommended to use the official *pacman* module.
* A package is reinstalled only if an update is available, using the *--needed* parameter, except for *yay* which does not support it and systematically reinstalls. * The *--needed* parameter of the helper is systematically used, it means if a package is up to date, it is not built and reinstalled.
### Examples ### Examples
Use it in a task, as in the following examples: Use it in a task, as in the following examples:
@@ -67,7 +97,7 @@ Use it in a task, as in the following examples:
``` ```
### Create the "aur_builder" user ### Create the "aur_builder" user
While Ansible expects to SSH as root, AUR helpers do not allow executing operations as root, they all fail with "you cannot perform this operation as root". It is therefore recommended to create a user, that we will call for example *aur_builder*, that has no need for password with pacman in sudoers. While Ansible expects to SSH as root, AUR helpers do not allow executing operations as root, they all fail with "you cannot perform this operation as root". It is therefore recommended to create a user, let's call it *aur_builder*, that has no need for password with pacman in sudoers.
This can be done in Ansible with the following actions: This can be done in Ansible with the following actions:
``` ```
- user: - user:

View File

@@ -9,6 +9,7 @@ import tarfile
import os import os
import os.path import os.path
import tempfile import tempfile
import urllib.parse
DOCUMENTATION = ''' DOCUMENTATION = '''
@@ -34,7 +35,7 @@ options:
description: description:
- The helper to use, 'auto' uses the first known helper found and makepkg as a fallback. - The helper to use, 'auto' uses the first known helper found and makepkg as a fallback.
default: auto default: auto
choices: [ auto, aurman, pacaur, trizen, pikaur, yay, makepkg ] choices: [ auto, yay, pacaur, trizen, pikaur, aurman, makepkg ]
skip_installed: skip_installed:
description: description:
@@ -44,11 +45,22 @@ options:
skip_pgp_check: skip_pgp_check:
description: description:
- Skip verification of PGP signatures. - Only valid with makepkg.
This is useful when installing packages on a host without GnuPG (properly) configured. Skip PGP signatures verification of source file.
Only valid with makepkg. This is useful when installing packages without GnuPG (properly) configured.
type: bool type: bool
default: no default: no
ignore_arch:
description:
- Only valid with makepkg.
Ignore a missing or incomplete arch field, useful when the PKGBUILD does not have the arch=('yourarch') field.
type: bool
default: no
aur_only:
description:
- Limit operation to the AUR. Compatible with yay, aurman, pacaur and trizen.
notes: notes:
- When used with a `loop:` each package will be processed individually, - 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. it is much more efficient to pass the list directly to the `name` option.
@@ -72,14 +84,15 @@ EXAMPLES = '''
def_lang = ['env', 'LC_ALL=C'] def_lang = ['env', 'LC_ALL=C']
use_cmd = { use_cmd = {
'aurman': ['aurman', '-S', '--noconfirm', '--noedit', '--needed'], 'yay': ['yay', '-S', '--noconfirm', '--needed', '--cleanafter'],
'yay': ['yay', '-S', '--noconfirm', '--needed'],
'pacaur': ['pacaur', '-S', '--noconfirm', '--noedit', '--needed'], 'pacaur': ['pacaur', '-S', '--noconfirm', '--noedit', '--needed'],
'trizen': ['trizen', '-S', '--noconfirm', '--noedit', '--needed'], 'trizen': ['trizen', '-S', '--noconfirm', '--noedit', '--needed'],
'pikaur': ['pikaur', '-S', '--noconfirm', '--noedit', '--needed'], 'pikaur': ['pikaur', '-S', '--noconfirm', '--noedit', '--needed'],
'aurman': ['aurman', '-S', '--noconfirm', '--noedit', '--needed', '--skip_news', '--pgp_fetch', '--skip_new_locations'],
'makepkg': ['makepkg', '--syncdeps', '--install', '--noconfirm', '--needed'] 'makepkg': ['makepkg', '--syncdeps', '--install', '--noconfirm', '--needed']
} }
# optional: aurman, pacaur, trizen have a --aur option, do things only for aur
has_aur_option = ['yay', 'pacaur', 'trizen', 'aurman']
def package_installed(module, package): def package_installed(module, package):
@@ -95,61 +108,63 @@ def check_packages(module, packages):
Inform the user what would change if the module were run Inform the user what would change if the module were run
""" """
would_be_changed = [] would_be_changed = []
diff = {
'before': '',
'after': '',
}
for package in packages: for package in packages:
installed = package_installed(module, package) installed = package_installed(module, package)
if not installed: if not installed:
would_be_changed.append(package) would_be_changed.append(package)
if module._diff:
diff['after'] += package + "\n"
if would_be_changed: if would_be_changed:
status = True status = True
if (len(packages) > 1): if len(packages) > 1:
message = '%s package(s) would be installed' % str(len(would_be_changed)) message = '{} package(s) would be installed'.format(len(would_be_changed))
else: else:
message = 'package would be installed' message = 'package would be installed'
else: else:
status = False status = False
if (len(packages) > 1): if len(packages) > 1:
message = 'all packages are already installed' message = 'all packages are already installed'
else: else:
message = 'package is already installed' message = 'package is already installed'
module.exit_json(changed=status, msg=message) module.exit_json(changed=status, msg=message, diff=diff)
def install_with_makepkg(module, package): def install_with_makepkg(module, package):
""" """
Install the specified package with makepkg Install the specified package with makepkg
""" """
f = open_url('https://aur.archlinux.org/rpc/?v=5&type=info&arg={}'.format(package)) module.get_bin_path('fakeroot', required=True)
f = open_url('https://aur.archlinux.org/rpc/?v=5&type=info&arg={}'.format(urllib.parse.quote(package)))
result = json.loads(f.read().decode('utf8')) result = json.loads(f.read().decode('utf8'))
if result['resultcount'] != 1: if result['resultcount'] != 1:
return (1, '', 'package not found') return (1, '', 'package {} not found'.format(package))
result = result['results'][0] result = result['results'][0]
f = open_url('https://aur.archlinux.org/{}'.format(result['URLPath'])) f = open_url('https://aur.archlinux.org/{}'.format(result['URLPath']))
current_path = os.getcwd()
with tempfile.TemporaryDirectory() as tmpdir: with tempfile.TemporaryDirectory() as tmpdir:
os.chdir(tmpdir) tar = tarfile.open(mode='r|*', fileobj=f)
tar_file = '{}.tar.gz'.format(result['Name']) tar.extractall(tmpdir)
with open(tar_file, 'wb') as out:
out.write(f.read())
tar = tarfile.open(tar_file)
tar.extractall()
tar.close() tar.close()
os.chdir(format(result['Name']))
if module.params['skip_pgp_check']: if module.params['skip_pgp_check']:
use_cmd['makepkg'].append('--skippgpcheck') use_cmd['makepkg'].append('--skippgpcheck')
rc, out, err = module.run_command(use_cmd['makepkg'], check_rc=True) if module.params['ignore_arch']:
os.chdir(current_path) use_cmd['makepkg'].append('--ignorearch')
rc, out, err = module.run_command(use_cmd['makepkg'], cwd=os.path.join(tmpdir, result['Name']), check_rc=True)
return (rc, out, err) return (rc, out, err)
def upgrade(module, use): def upgrade(module, use, aur_only):
""" """
Upgrade the whole system Upgrade the whole system
""" """
assert use in use_cmd assert use in use_cmd
rc, out, err = module.run_command(def_lang + use_cmd[use] + ['-u'], check_rc=True) rc, out, err = module.run_command(def_lang + use_cmd[use] + ['--aur' if (aur_only and use in has_aur_option) else None] + ['-u'], check_rc=True)
module.exit_json( module.exit_json(
changed=not (out == '' or 'nothing to do' in out or 'No AUR updates found' in out), changed=not (out == '' or 'nothing to do' in out or 'No AUR updates found' in out),
@@ -158,7 +173,7 @@ def upgrade(module, use):
) )
def install_packages(module, packages, use, skip_installed): def install_packages(module, packages, use, skip_installed, aur_only):
""" """
Install the specified packages Install the specified packages
""" """
@@ -174,14 +189,11 @@ def install_packages(module, packages, use, skip_installed):
if use == 'makepkg': if use == 'makepkg':
rc, out, err = install_with_makepkg(module, package) rc, out, err = install_with_makepkg(module, package)
else: else:
rc, out, err = module.run_command(def_lang + use_cmd[use] + [package], check_rc=True) rc, out, err = module.run_command(def_lang + use_cmd[use] + ['--aur' if (aur_only and use in has_aur_option) else None] + [package], check_rc=True)
changed_iter = changed_iter or not (out == '' or '-- skipping' in out or 'nothing to do' in out) changed_iter = changed_iter or not (out == '' or '-- skipping' in out or 'nothing to do' in out)
if changed_iter: message = 'installed package(s)' if changed_iter else 'package(s) already installed'
message = 'installed package(s)'
else:
message = 'package(s) already installed'
module.exit_json( module.exit_json(
changed=changed_iter, changed=changed_iter,
@@ -197,13 +209,17 @@ def main():
'name': { 'name': {
'type': 'list', 'type': 'list',
}, },
'ignore_arch': {
'default': False,
'type': 'bool',
},
'upgrade': { 'upgrade': {
'default': False, 'default': False,
'type': 'bool', 'type': 'bool',
}, },
'use': { 'use': {
'default': 'auto', 'default': 'auto',
'choices': ['auto', 'aurman', 'pacaur', 'trizen', 'pikaur', 'yaourt', 'yay', 'makepkg'], 'choices': ['auto'] + list(use_cmd.keys()),
}, },
'skip_installed': { 'skip_installed': {
'default': False, 'default': False,
@@ -213,6 +229,10 @@ def main():
'default': False, 'default': False,
'type': 'bool', 'type': 'bool',
}, },
'aur_only': {
'default': False,
'type': 'bool',
},
}, },
required_one_of=[['name', 'upgrade']], required_one_of=[['name', 'upgrade']],
supports_check_mode=True supports_check_mode=True
@@ -227,7 +247,7 @@ def main():
use = 'makepkg' use = 'makepkg'
# auto: select the first helper for which the bin is found # auto: select the first helper for which the bin is found
for k in use_cmd: for k in use_cmd:
if module.get_bin_path(k, False): if module.get_bin_path(k):
use = k use = k
break break
else: else:
@@ -237,9 +257,9 @@ def main():
module.fail_json(msg="Upgrade cannot be used with this option.") module.fail_json(msg="Upgrade cannot be used with this option.")
else: else:
if params['upgrade']: if params['upgrade']:
upgrade(module, use) upgrade(module, use, params['aur_only'])
else: else:
install_packages(module, params['name'], use, params['skip_installed']) install_packages(module, params['name'], use, params['skip_installed'], params['aur_only'])
if __name__ == '__main__': if __name__ == '__main__':

17
meta/main.yml Normal file
View File

@@ -0,0 +1,17 @@
galaxy_info:
author: kewlfft
role_name: aur
description: Ansible module to use some Arch User Repository (AUR) helpers as well as makepkg.
license: GPL-3.0-or-later
min_ansible_version: 2.0
# https://galaxy.ansible.com/api/v1/platforms/
platforms:
- name: ArchLinux
versions:
- any
galaxy_tags:
- aur
dependencies: []