mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 12:50:22 -07:00
Greatly speed up homebrew module when multiple packages are passed in the name
key (#9181)
* Increase test coverage and assert output more strictly * Remove unused `_current_package_is_installed_from_head` * Remove `un/changed_count` and infer from un/changed_pkgs length * Track `installed` & `outdated` package state once * Validate package names beforehand * Install packages in 1 brew call instead of N This also has the side effect of fixing the check message so that it prints every packages that will be installed instead of only the first one. * Uninstall packages in 1 brew call instead of N * Link packages in 1 brew call instead of N * Unlink packages in 1 brew call instead of N * Upgrade packages in 1 brew call instead of N * Remove dangling checks * Remove `_status` method and directly return the tuple * Add changelog fragment * Fix invalid format string (nice catch pylint!) * Update changelogs/fragments/9181-improve-homebrew-module-performance.yml Co-authored-by: Felix Fontein <felix@fontein.de> * Update brew info parsing for casks * Update changelogs/fragments/9181-improve-homebrew-module-performance.yml Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> --------- Co-authored-by: Felix Fontein <felix@fontein.de> Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
This commit is contained in:
parent
da97e220ef
commit
fddccea940
3 changed files with 409 additions and 191 deletions
|
@ -56,6 +56,9 @@
|
|||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Package installed: gnu-tar'"
|
||||
- "package_result.changed_pkgs == ['gnu-tar']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Again install {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
|
@ -69,6 +72,41 @@
|
|||
- assert:
|
||||
that:
|
||||
- not package_result.changed
|
||||
- "package_result.msg == 'Package already installed: gnu-tar'"
|
||||
- "package_result.changed_pkgs == []"
|
||||
- "package_result.unchanged_pkgs == ['gnu-tar']"
|
||||
|
||||
- name: Unlink {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_name }}"
|
||||
state: unlinked
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Package unlinked: gnu-tar'"
|
||||
- "package_result.changed_pkgs == ['gnu-tar']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Link {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_name }}"
|
||||
state: linked
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Package linked: gnu-tar'"
|
||||
- "package_result.changed_pkgs == ['gnu-tar']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Uninstall {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
|
@ -82,6 +120,9 @@
|
|||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Package uninstalled: gnu-tar'"
|
||||
- "package_result.changed_pkgs == ['gnu-tar']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Again uninstall {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
|
@ -95,3 +136,188 @@
|
|||
- assert:
|
||||
that:
|
||||
- not package_result.changed
|
||||
- "package_result.msg == 'Package already uninstalled: gnu-tar'"
|
||||
- "package_result.changed_pkgs == []"
|
||||
- "package_result.unchanged_pkgs == ['gnu-tar']"
|
||||
|
||||
- name: Upgrade {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_name }}"
|
||||
state: latest
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Package upgraded: gnu-tar'"
|
||||
- "package_result.changed_pkgs == ['gnu-tar']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Again upgrade {{ package_name }} package using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_name }}"
|
||||
state: latest
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- not package_result.changed
|
||||
- "package_result.msg == 'Package already upgraded: gnu-tar'"
|
||||
- "package_result.changed_pkgs == []"
|
||||
- "package_result.unchanged_pkgs == ['gnu-tar']"
|
||||
|
||||
- vars:
|
||||
package_names:
|
||||
- gnu-tar
|
||||
- gnu-time
|
||||
|
||||
block:
|
||||
- name: Make sure {{ package_names }} packages are not installed
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: absent
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
|
||||
- name: Install only {{ package_names[0] }} package using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names[0] }}"
|
||||
state: present
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
|
||||
- name: Install {{ package_names }} packages using homebrew (one is already installed)
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: present
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Changed: 1, Unchanged: 1'"
|
||||
- "package_result.changed_pkgs == ['gnu-time']"
|
||||
- "package_result.unchanged_pkgs == ['gnu-tar']"
|
||||
|
||||
- name: Again install {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: present
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- not package_result.changed
|
||||
- "package_result.msg == 'Changed: 0, Unchanged: 2'"
|
||||
- "package_result.changed_pkgs == []"
|
||||
- "package_result.unchanged_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
|
||||
- name: Unlink {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: unlinked
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
|
||||
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Link {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: linked
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
|
||||
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Uninstall {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: absent
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
|
||||
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Again uninstall {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: absent
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- not package_result.changed
|
||||
- "package_result.msg == 'Changed: 0, Unchanged: 2'"
|
||||
- "package_result.changed_pkgs == []"
|
||||
- "package_result.unchanged_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
|
||||
- name: Upgrade {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: latest
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- package_result.changed
|
||||
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
|
||||
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
- "package_result.unchanged_pkgs == []"
|
||||
|
||||
- name: Again upgrade {{ package_names }} packages using homebrew
|
||||
homebrew:
|
||||
name: "{{ package_names }}"
|
||||
state: latest
|
||||
update_homebrew: false
|
||||
become: true
|
||||
become_user: "{{ brew_stat.stat.pw_name }}"
|
||||
register: package_result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- not package_result.changed
|
||||
- "package_result.msg == 'Changed: 0, Unchanged: 2'"
|
||||
- "package_result.changed_pkgs == []"
|
||||
- "package_result.unchanged_pkgs | sort == ['gnu-tar', 'gnu-time']"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue