Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

* **role:glances**: Add RHEL 10 / Rocky 10 / Alma 10 support by installing glances into a Python venv via pip, since the package is not available in EPEL 10.
* **role:network**: README still claimed the role disables zeroconf, but the corresponding `NOZEROCONF=yes` task was removed in 2024 (NetworkManager no longer adds the zeroconf route by default). Bring the README in line with what the role actually does and call out the Hetzner-specific `hc-utils` cleanup explicitly.
* **role:haveged**: Setting `haveged__service_state: 'stopped'` produced the invalid systemctl command `stopp` because of a `[:-2]` slice in the task name. The role now uses `ansible.builtin.service` directly with the configured state, so all four valid values (`reloaded` / `restarted` / `started` / `stopped`) work as expected.
* **role:unattended_upgrades**: Correct README description; the role deactivates Unattended Upgrades by setting both `APT::Periodic` flags to `0` in `/etc/apt/apt.conf.d/20auto-upgrades` (Debian/Ubuntu), it does not remove the `unattended-upgrades` package.
Expand Down Expand Up @@ -72,7 +73,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* **role:freeipa_client**: Add `meta/argument_specs.yml`. No behaviour change.
* **role:haveged, role:libmaxminddb, role:qemu_guest_agent**: README now also explains *what* the underlying tool actually does and when you'd want it (entropy daemon, MaxMind GeoIP reader library, hypervisor-to-guest communication channel) instead of just linking out.
* **roles**: README intros across 19 roles (`ansible_init`, `cockpit`, `collect_rpmnew_rpmsave`, `crypto_policy`, `hostname`, `kdump`, `repo_collabora`, `repo_docker`, `repo_gitlab_ce`, `repo_gitlab_runner`, `repo_grafana`, `repo_influxdb`, `repo_mongodb`, `repo_redis`, `selinux`, `snmp`, `sshd`, `timezone`, `unattended_upgrades`) now explain in one or two sentences what the underlying software actually is and when an admin would use it, instead of just naming it.
* **COMPATIBILITY**: Promote the RHEL 10 column from `(x)` (or empty) to `x` (proven) for the 23 roles exercised by `setup_basic` and validated on a RHEL 10 host: `at`, `cloud_init`, `cockpit`, `dnf_makecache`, `hostname`, `icinga2_agent`, `kdump`, `login`, `lvm`, `mailto_root`, `monitoring_plugins`, `motd`, `network`, `python`, `python_venv`, `repo_icinga`, `repo_monitoring_plugins`, `rsyslog`, `selinux`, `system_update`, `systemd_journald`, `timezone`, `tools`. `glances` stays at `(x)` because the package is missing in EPEL 10 (see the role's "Platform Support" section).
* **COMPATIBILITY**: Promote the RHEL 10 column from `(x)` (or empty) to `x` (proven) for the 23 roles exercised by `setup_basic` and validated on a RHEL 10 host: `at`, `cloud_init`, `cockpit`, `dnf_makecache`, `hostname`, `icinga2_agent`, `kdump`, `login`, `lvm`, `mailto_root`, `monitoring_plugins`, `motd`, `network`, `python`, `python_venv`, `repo_icinga`, `repo_monitoring_plugins`, `rsyslog`, `selinux`, `system_update`, `systemd_journald`, `timezone`, `tools`.
* **COMPATIBILITY**: `at`, `haveged`, `mod_maxminddb` and `qemu_guest_agent` are now expected to work on Debian 12 / 13 and Ubuntu 22.04 / 24.04 / 26.04 (marked `(x)`: code-reviewed, untested in production).
* **role:hostname, role:kdump, role:timezone**: Add `meta/argument_specs.yml` so Ansible validates the role variables (types, choices) at role entry. No behaviour change.
* **role:libmaxminddb, role:mod_maxminddb**: Add `meta/argument_specs.yml`. No behaviour change.
Expand All @@ -86,7 +87,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* **role:apps**: Document that the role uses `ansible.builtin.package` internally, so `state: 'latest'` works on backends that support it.
* **role:cloud_init**: README now lists all cleanup actions (`cloud-init` package removal, `/etc/NetworkManager/conf.d/99-cloud-init.conf`, `/etc/cloud/cloud.cfg.rpmsave`).
* **role:dnf_versionlock**: README explains the RHEL 7 vs RHEL 8+ backend differences (`yum-plugin-versionlock` vs `dnf-command(versionlock)` and the corresponding lock-list paths).
* **role:glances**: Document the optional `glances__skip_repo_baseos` variable (skip the implicit `repo_baseos` invocation on Rocky 9) and the implicit `repo_epel` / `repo_baseos` dependencies. Add a "Platform Support" section noting that the role currently fails on RHEL 10 / Rocky 10 / Alma 10 because `glances` is not packaged in EPEL 10.
* **role:glances**: Document the optional `glances__skip_repo_baseos` variable (skip the implicit `repo_baseos` invocation on Rocky 9) and the implicit `repo_epel` / `repo_baseos` dependencies.
* **role:icingaweb2_module_company**: Document the install-once idempotency (module is installed on first run only; subsequent runs do not overwrite local customizations) and the controller-side download mechanism.
* **role:icingaweb2_module_incubator**: Document the controller-side download mechanism and that the directory is overwritten on every run, so changing `icingaweb2_module_incubator__version` is the supported upgrade path.
* **role:icingaweb2_module_pdfexport**: Document the controller-side download mechanism and the upgrade-on-rerun behaviour. Add a pointer that runtime dependencies (e.g. a headless browser) have to be installed separately.
Expand Down
2 changes: 1 addition & 1 deletion COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ freeipa_client | | | x | x | x | | |
freeipa_server | | | x | x | x | | | |
github_project_createrepo | | | x |(x)|(x) | | | |
gitlab_ce | | | x |(x)|(x) | | | |
glances |(x) |(x) | x | x |(x) | (x) | (x) | (x) |
glances |(x) |(x) | x | x | x | (x) | (x) | (x) |
glpi_agent | | | x | x |(x) | | | |
grafana | | | x | x | x | | | |
grafana_grizzly |(x) |(x) | x | x |(x) | (x) | (x) | (x) |
Expand Down
2 changes: 1 addition & 1 deletion roles/glances/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ This role installs [glances](https://nicolargo.github.io/glances/) and drops a s

## Platform Support

`glances` is currently **not packaged in EPEL 10**, so this role fails with `No package glances available.` on RHEL 10 and clones (Rocky / Alma 10). Install glances manually (e.g. via `pip install glances` in a venv, or from a third-party repo) on those hosts and skip this role.
`glances` is not packaged in EPEL 10. On RHEL 10 and clones (Rocky / Alma 10) the role installs glances into a dedicated Python venv at `/opt/python-venv/glances` via pip; on all other supported platforms glances is installed from the distribution package.


## Tags
Expand Down
15 changes: 15 additions & 0 deletions roles/glances/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,21 @@
name:
- 'glances'
state: 'present'
when:
- 'not (ansible_facts["os_family"] == "RedHat" and ansible_facts["distribution_major_version"] | int >= 10)'

- name: 'Install glances into a Python venv (RHEL 10+)'
ansible.builtin.include_role:
name: 'linuxfabrik.lfops.python_venv'
vars:
python_venv__venvs__role_var:
- name: 'glances'
packages:
- 'glances'
exposed_binaries:
- 'glances'
when:
- 'ansible_facts["os_family"] == "RedHat" and ansible_facts["distribution_major_version"] | int >= 10'

- name: 'Deploy /etc/profile.d/glances.sh'
ansible.builtin.template:
Expand Down
5 changes: 4 additions & 1 deletion roles/glances/templates/etc/profile.d/glances.sh.j2
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# {{ ansible_managed }}
# 2022051701

{% if ansible_facts['distribution'] == 'RedHat' and ansible_facts['distribution_major_version']|int < 8 %}
{% if ansible_facts['os_family'] == 'RedHat' and ansible_facts['distribution_major_version'] | int >= 10 %}
alias top='/opt/python-venv/glances/bin/glances -t 1'
alias glances='/opt/python-venv/glances/bin/glances -t 1'
{% elif ansible_facts['distribution'] == 'RedHat' and ansible_facts['distribution_major_version'] | int < 8 %}
alias top='glances -t 1 --disable-docker'
alias glances='glances -t 1 --disable-docker'
{% else %}
Expand Down