mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
homebrew: Add upgrade_options in upgrade_all (#24)
Handle upgrade options in upgrade_all state in homebrew module. Fixes: #54541 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
4fba692c1b
commit
c874089d1d
3 changed files with 122 additions and 7 deletions
|
@ -69,6 +69,11 @@ options:
|
|||
aliases: ['options']
|
||||
type: list
|
||||
elements: str
|
||||
upgrade_options:
|
||||
description:
|
||||
- Option flags to upgrade.
|
||||
type: list
|
||||
elements: str
|
||||
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.
|
||||
|
@ -123,6 +128,11 @@ EXAMPLES = '''
|
|||
name: foo
|
||||
state: present
|
||||
install_options: with-baz,enable-debug
|
||||
|
||||
- name: Use ignored-pinned option while upgrading all
|
||||
homebrew:
|
||||
upgrade_all: yes
|
||||
upgrade_options: ignored-pinned
|
||||
'''
|
||||
|
||||
import os.path
|
||||
|
@ -359,14 +369,17 @@ class Homebrew(object):
|
|||
|
||||
def __init__(self, module, path, packages=None, state=None,
|
||||
update_homebrew=False, upgrade_all=False,
|
||||
install_options=None):
|
||||
install_options=None, upgrade_options=None):
|
||||
if not install_options:
|
||||
install_options = list()
|
||||
if not upgrade_options:
|
||||
upgrade_options = list()
|
||||
self._setup_status_vars()
|
||||
self._setup_instance_vars(module=module, path=path, packages=packages,
|
||||
state=state, update_homebrew=update_homebrew,
|
||||
upgrade_all=upgrade_all,
|
||||
install_options=install_options, )
|
||||
install_options=install_options,
|
||||
upgrade_options=upgrade_options,)
|
||||
|
||||
self._prep()
|
||||
|
||||
|
@ -536,10 +549,9 @@ class Homebrew(object):
|
|||
self.changed = True
|
||||
self.message = 'Homebrew packages would be upgraded.'
|
||||
raise HomebrewException(self.message)
|
||||
rc, out, err = self.module.run_command([
|
||||
self.brew_path,
|
||||
'upgrade',
|
||||
])
|
||||
cmd = [self.brew_path, 'upgrade'] + self.upgrade_options
|
||||
|
||||
rc, out, err = self.module.run_command(cmd)
|
||||
if rc == 0:
|
||||
if not out:
|
||||
self.message = 'Homebrew packages already upgraded.'
|
||||
|
@ -857,6 +869,11 @@ def main():
|
|||
aliases=['options'],
|
||||
type='list',
|
||||
elements='str',
|
||||
),
|
||||
upgrade_options=dict(
|
||||
default=None,
|
||||
type='list',
|
||||
elements='str',
|
||||
)
|
||||
),
|
||||
supports_check_mode=True,
|
||||
|
@ -895,9 +912,13 @@ def main():
|
|||
install_options = ['--{0}'.format(install_option)
|
||||
for install_option in p['install_options']]
|
||||
|
||||
p['upgrade_options'] = p['upgrade_options'] or []
|
||||
upgrade_options = ['--{0}'.format(upgrade_option)
|
||||
for upgrade_option in p['upgrade_options']]
|
||||
brew = Homebrew(module=module, path=path, packages=packages,
|
||||
state=state, update_homebrew=update_homebrew,
|
||||
upgrade_all=upgrade_all, install_options=install_options)
|
||||
upgrade_all=upgrade_all, install_options=install_options,
|
||||
upgrade_options=upgrade_options)
|
||||
(failed, changed, message) = brew.run()
|
||||
if failed:
|
||||
module.fail_json(msg=message)
|
||||
|
|
6
tests/integration/targets/homebrew/aliases
Normal file
6
tests/integration/targets/homebrew/aliases
Normal file
|
@ -0,0 +1,6 @@
|
|||
shippable/posix/group1
|
||||
skip/aix
|
||||
skip/freebsd
|
||||
skip/rhel
|
||||
skip/docker
|
||||
skip/python2.6
|
88
tests/integration/targets/homebrew/tasks/main.yml
Normal file
88
tests/integration/targets/homebrew/tasks/main.yml
Normal file
|
@ -0,0 +1,88 @@
|
|||
# Test code for the homebrew module.
|
||||
# Copyright: (c) 2020, Abhijeet Kasurde <akasurde@redhat.com>
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
---
|
||||
- name: Find brew binary
|
||||
command: which brew
|
||||
register: brew_which
|
||||
when: ansible_distribution in ['MacOSX']
|
||||
|
||||
- name: Get owner of brew binary
|
||||
stat:
|
||||
path: "{{ brew_which.stdout }}"
|
||||
register: brew_stat
|
||||
when: ansible_distribution in ['MacOSX']
|
||||
|
||||
#- name: Use ignored-pinned option while upgrading all
|
||||
# homebrew:
|
||||
# upgrade_all: yes
|
||||
# upgrade_options: ignore-pinned
|
||||
# become: yes
|
||||
# become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
# register: upgrade_option_result
|
||||
# environment:
|
||||
# HOMEBREW_NO_AUTO_UPDATE: True
|
||||
|
||||
#- assert:
|
||||
# that:
|
||||
# - upgrade_option_result.changed
|
||||
|
||||
- name: Install xz package using homebrew
|
||||
homebrew:
|
||||
name: xz
|
||||
state: present
|
||||
update_homebrew: no
|
||||
become: yes
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: xz_result
|
||||
environment:
|
||||
HOMEBREW_NO_AUTO_UPDATE: True
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- xz_result.changed
|
||||
|
||||
- name: Again install xz package using homebrew
|
||||
homebrew:
|
||||
name: xz
|
||||
state: present
|
||||
update_homebrew: no
|
||||
become: yes
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: xz_result
|
||||
environment:
|
||||
HOMEBREW_NO_AUTO_UPDATE: True
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- not xz_result.changed
|
||||
|
||||
- name: Uninstall xz package using homebrew
|
||||
homebrew:
|
||||
name: xz
|
||||
state: absent
|
||||
update_homebrew: no
|
||||
become: yes
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: xz_result
|
||||
environment:
|
||||
HOMEBREW_NO_AUTO_UPDATE: True
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- xz_result.changed
|
||||
|
||||
- name: Again uninstall xz package using homebrew
|
||||
homebrew:
|
||||
name: xz
|
||||
state: absent
|
||||
update_homebrew: no
|
||||
become: yes
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: xz_result
|
||||
environment:
|
||||
HOMEBREW_NO_AUTO_UPDATE: True
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- not xz_result.changed
|
Loading…
Reference in a new issue