feat: initial cross-distro package management role

Supports apt, dnf, yum, pacman, apk and zypper. Variables cover install,
remove, upgrade, cache refresh and autoremove.
This commit is contained in:
2026-05-24 16:40:42 +02:00
commit c94df9fefa
12 changed files with 273 additions and 0 deletions

26
tasks/apk.yml Normal file
View File

@@ -0,0 +1,26 @@
---
- name: Update apk cache
community.general.apk:
update_cache: true
become: true
when: packages_update_cache | bool
- name: Upgrade all packages
community.general.apk:
upgrade: true
become: true
when: packages_upgrade | bool
- name: Install packages
community.general.apk:
name: "{{ packages_install }}"
state: "{{ packages_state }}"
become: true
when: packages_install | length > 0
- name: Remove packages
community.general.apk:
name: "{{ packages_remove }}"
state: absent
become: true
when: packages_remove | length > 0

34
tasks/apt.yml Normal file
View File

@@ -0,0 +1,34 @@
---
- name: Update apt cache
ansible.builtin.apt:
update_cache: true
cache_valid_time: "{{ packages_cache_valid_time }}"
become: true
when: packages_update_cache | bool
- name: Upgrade all packages
ansible.builtin.apt:
upgrade: dist
become: true
when: packages_upgrade | bool
- name: Install packages
ansible.builtin.apt:
name: "{{ packages_install }}"
state: "{{ packages_state }}"
become: true
when: packages_install | length > 0
- name: Remove packages
ansible.builtin.apt:
name: "{{ packages_remove }}"
state: absent
purge: false
become: true
when: packages_remove | length > 0
- name: Remove unused dependencies
ansible.builtin.apt:
autoremove: true
become: true
when: packages_autoremove | bool

33
tasks/dnf.yml Normal file
View File

@@ -0,0 +1,33 @@
---
- name: Update dnf cache
ansible.builtin.dnf:
update_cache: true
become: true
when: packages_update_cache | bool
- name: Upgrade all packages
ansible.builtin.dnf:
name: "*"
state: latest
become: true
when: packages_upgrade | bool
- name: Install packages
ansible.builtin.dnf:
name: "{{ packages_install }}"
state: "{{ packages_state }}"
become: true
when: packages_install | length > 0
- name: Remove packages
ansible.builtin.dnf:
name: "{{ packages_remove }}"
state: absent
become: true
when: packages_remove | length > 0
- name: Remove unused dependencies
ansible.builtin.dnf:
autoremove: true
become: true
when: packages_autoremove | bool

9
tasks/main.yml Normal file
View File

@@ -0,0 +1,9 @@
---
- name: Assert supported package manager
ansible.builtin.assert:
that:
- ansible_pkg_mgr in ['apt', 'dnf', 'yum', 'pacman', 'apk', 'zypper']
fail_msg: "Package manager '{{ ansible_pkg_mgr }}' is not supported by this role"
- name: Include package manager tasks
ansible.builtin.include_tasks: "{{ ansible_pkg_mgr }}.yml"

26
tasks/pacman.yml Normal file
View File

@@ -0,0 +1,26 @@
---
- name: Update pacman cache
community.general.pacman:
update_cache: true
become: true
when: packages_update_cache | bool
- name: Upgrade all packages
community.general.pacman:
upgrade: true
become: true
when: packages_upgrade | bool
- name: Install packages
community.general.pacman:
name: "{{ packages_install }}"
state: "{{ packages_state }}"
become: true
when: packages_install | length > 0
- name: Remove packages
community.general.pacman:
name: "{{ packages_remove }}"
state: absent
become: true
when: packages_remove | length > 0

27
tasks/yum.yml Normal file
View File

@@ -0,0 +1,27 @@
---
- name: Update yum cache
ansible.builtin.yum:
update_cache: true
become: true
when: packages_update_cache | bool
- name: Upgrade all packages
ansible.builtin.yum:
name: "*"
state: latest
become: true
when: packages_upgrade | bool
- name: Install packages
ansible.builtin.yum:
name: "{{ packages_install }}"
state: "{{ packages_state }}"
become: true
when: packages_install | length > 0
- name: Remove packages
ansible.builtin.yum:
name: "{{ packages_remove }}"
state: absent
become: true
when: packages_remove | length > 0

27
tasks/zypper.yml Normal file
View File

@@ -0,0 +1,27 @@
---
- name: Refresh zypper repositories
community.general.zypper_repository:
runrefresh: true
become: true
when: packages_update_cache | bool
- name: Upgrade all packages
community.general.zypper:
name: "*"
state: dist-upgrade
become: true
when: packages_upgrade | bool
- name: Install packages
community.general.zypper:
name: "{{ packages_install }}"
state: "{{ packages_state }}"
become: true
when: packages_install | length > 0
- name: Remove packages
community.general.zypper:
name: "{{ packages_remove }}"
state: absent
become: true
when: packages_remove | length > 0