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:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.retry
|
||||
43
README.md
Normal file
43
README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# ansible-role-packages
|
||||
|
||||
Manages Linux packages across distributions using the native package manager.
|
||||
|
||||
Supported package managers: `apt`, `dnf`, `yum`, `pacman`, `apk`, `zypper`.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Ansible >= 2.14
|
||||
- `community.general` collection (required for Arch, Alpine, openSUSE targets)
|
||||
|
||||
## Role Variables
|
||||
|
||||
| Variable | Default | Description |
|
||||
|---|---|---|
|
||||
| `packages_install` | `[]` | List of packages to install |
|
||||
| `packages_remove` | `[]` | List of packages to remove |
|
||||
| `packages_state` | `present` | State for installed packages: `present` or `latest` |
|
||||
| `packages_upgrade` | `false` | Upgrade all packages on the system |
|
||||
| `packages_update_cache` | `true` | Refresh the package cache before operations |
|
||||
| `packages_cache_valid_time` | `3600` | Maximum cache age in seconds before forcing a refresh (apt only) |
|
||||
| `packages_autoremove` | `false` | Remove unused dependencies after operations (apt, dnf only) |
|
||||
|
||||
## Example Playbook
|
||||
|
||||
```yaml
|
||||
- hosts: servers
|
||||
roles:
|
||||
- role: ansible-role-packages
|
||||
vars:
|
||||
packages_install:
|
||||
- curl
|
||||
- git
|
||||
- vim
|
||||
packages_remove:
|
||||
- telnet
|
||||
packages_update_cache: true
|
||||
packages_upgrade: false
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
8
defaults/main.yml
Normal file
8
defaults/main.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
packages_install: []
|
||||
packages_remove: []
|
||||
packages_upgrade: false
|
||||
packages_update_cache: true
|
||||
packages_cache_valid_time: 3600
|
||||
packages_state: present
|
||||
packages_autoremove: false
|
||||
1
handlers/main.yml
Normal file
1
handlers/main.yml
Normal file
@@ -0,0 +1 @@
|
||||
---
|
||||
38
meta/main.yml
Normal file
38
meta/main.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
galaxy_info:
|
||||
author: mathieu
|
||||
description: Cross-distribution Linux package management
|
||||
license: MIT
|
||||
min_ansible_version: "2.14"
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- bullseye
|
||||
- bookworm
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- focal
|
||||
- jammy
|
||||
- noble
|
||||
- name: EL
|
||||
versions:
|
||||
- "8"
|
||||
- "9"
|
||||
- name: Fedora
|
||||
versions:
|
||||
- all
|
||||
- name: ArchLinux
|
||||
versions:
|
||||
- all
|
||||
- name: Alpine
|
||||
versions:
|
||||
- all
|
||||
- name: opensuse
|
||||
versions:
|
||||
- all
|
||||
galaxy_tags:
|
||||
- packages
|
||||
- system
|
||||
- linux
|
||||
|
||||
dependencies: []
|
||||
26
tasks/apk.yml
Normal file
26
tasks/apk.yml
Normal 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
34
tasks/apt.yml
Normal 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
33
tasks/dnf.yml
Normal 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
9
tasks/main.yml
Normal 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
26
tasks/pacman.yml
Normal 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
27
tasks/yum.yml
Normal 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
27
tasks/zypper.yml
Normal 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
|
||||
Reference in New Issue
Block a user