Aller au contenu
Infrastructure as Code medium

Module dnf Ansible : enablerepo, security, exclude, autoremove

9 min de lecture

Logo Ansible

Sur un parc 100% RHEL/RockyLinux/AlmaLinux, ansible.builtin.dnf est plus puissant que package: car il expose les options spécifiques de DNF. Cette page couvre les options critiques RHCE 2026 : enablerepo:, disablerepo:, security: true, bugfix: true, exclude:, autoremove:, update_cache:, download_only:.

Ces options permettent des opérations qu’on ne peut pas faire avec package: : appliquer uniquement les errata de sécurité, activer un repo temporairement, mettre à jour tout sauf le kernel, ou nettoyer les dépendances orphelines.

  • Comment activer un repo temporairement avec enablerepo: sans le persister.
  • Le pattern mise à jour de sécurité uniquement (security: true).
  • Comment exclure le kernel d’un upgrade massif (exclude: kernel*).
  • L’option autoremove: true pour le nettoyage post-upgrade.
  • Quand utiliser download_only: true (préparation d’opérations critiques).
  • Avoir lu Module packagednf: est le spécialiste RHEL de package:.
  • Comprendre la notion de repo DNF (/etc/yum.repos.d/*.repo).

enablerepo / disablerepo — activer un repo le temps de l’opération

Section intitulée « enablerepo / disablerepo — activer un repo le temps de l’opération »
- name: Installer htop depuis EPEL (sans activer EPEL en permanence)
ansible.builtin.dnf:
name: htop
state: present
enablerepo: epel

enablerepo: n’active le repo que pour cette tâche — pas de modification persistante. Au prochain dnf list, EPEL sera désactivé. Utile quand on ne veut pas exposer EPEL à des updates automatiques (paquets pas toujours stables).

disablerepo: fait l’inverse — désactive un repo le temps d’une opération. Pattern classique : désactiver un repo flaky quand on veut s’assurer qu’on tire d’un repo précis.

- name: Forcer l installation depuis le repo officiel uniquement
ansible.builtin.dnf:
name: nginx
state: present
disablerepo: epel,backports

C’est le pattern le plus utile en production : applique uniquement les errata classés “Security Advisory” par le vendor RHEL.

- name: Patcher uniquement les CVE
ansible.builtin.dnf:
name: '*'
state: latest
security: true

name: '*' = tous les paquets installés. state: latest = mettre à jour. security: true = filtre : seulement les paquets avec un errata de sécurité disponible.

Combiner avec bugfix: true pour aussi appliquer les bugfixes :

- name: Patcher securite ET bugs
ansible.builtin.dnf:
name: '*'
state: latest
security: true
bugfix: true

Exclude — préserver des paquets sensibles d’un upgrade massif

Section intitulée « Exclude — préserver des paquets sensibles d’un upgrade massif »
- name: Mise a jour complete sauf kernel
ansible.builtin.dnf:
name: '*'
state: latest
exclude: kernel*

Cas critique RHEL : un upgrade kernel nécessite un reboot. Si vous appliquez les patches de sécurité sans reboot programmé, exclude: kernel* évite de mettre la machine en état “kernel staged but not running” (sécurité dégradée jusqu’au prochain reboot).

exclude: accepte une liste : exclude: ["kernel*", "glibc"]. Wildcards style kernel* matchent kernel, kernel-headers, kernel-modules, etc.

Autoremove — nettoyer les dépendances orphelines

Section intitulée « Autoremove — nettoyer les dépendances orphelines »
- name: Supprimer un paquet et ses dependances orphelines
ansible.builtin.dnf:
name: httpd
state: absent
autoremove: true

Quand on désinstalle httpd, ses dépendances exclusives (apr, apr-util, httpd-tools) deviennent orphelines. autoremove: true les supprime automatiquement — comme dnf autoremove après un dnf remove.

Sans autoremove, on accumule des paquets fantômes au fil des cycles install/uninstall.

- name: Refresh cache puis installer
ansible.builtin.dnf:
name: nginx
state: latest
update_cache: true

Par défaut, DNF utilise un cache de métadonnées (TTL ~6h). update_cache: true force un refresh immédiat — utile quand on vient de modifier un fichier .repo ou de pousser un nouveau paquet dans un repo interne.

- name: Pre-telecharger pour install offline ulterieure
ansible.builtin.dnf:
name:
- bind
- dhcp-server
state: present
download_only: true
download_dir: /var/cache/staged-rpms/

Pré-télécharge les RPM dans download_dir sans les installer. Pattern utilisé pour :

  • Préparer un upgrade air-gapped : télécharger sur un nœud connecté, pousser sur un nœud isolé via copy:.
  • Réduire la fenêtre de panne : pré-stager 2h avant la maintenance, installer en 30s pendant la fenêtre.
- name: Installer le groupe Web Server (RHEL group)
ansible.builtin.dnf:
name: '@web-server'
state: present

DNF supporte des groupes pré-définis (@base, @web-server, @minimal-environment). dnf grouplist les liste. Pratique pour provisionner rapidement un rôle métier sans énumérer 30 paquets.

SymptômeCauseFix
update_cache: true lentRepos lents (CDN, network)Mettre une fois en début de play, pas par tâche
security: true ne trouve rienPas d’errata RHEL pour cette releaseVérifier dnf updateinfo list security
exclude: kernel ne marche pasWildcard manquantexclude: kernel* (avec *)
autoremove: true supprime un paquet vouluDépendance qu’on croyait directe est en réalité orphelineVérifier avec dnf list --installed, marquer comme userinstalled si besoin
enablerepo: ignoré silencieusementLe repo n’existe pas dans /etc/yum.repos.d/Vérifier que le repo est défini (même si désactivé)
  • dnf: est plus puissant que package: sur RHEL — utiliser ses options spécifiques.
  • enablerepo: active un repo temporairement — pas de modification persistante.
  • security: true est le pattern de patching de production — applique uniquement les errata CVE.
  • exclude: kernel* évite de stage un kernel sans reboot programmé.
  • autoremove: true sur state: absent nettoie les dépendances orphelines.

Cette page a un lab d’accompagnement : labs/modules-paquets/dnf-options/ dans stephrobert/ansible-training.

Challenge — sur db1.lab :

  1. Installer epel-release.
  2. Refresh cache + installer htop et ncdu depuis EPEL avec enablerepo: epel.
  3. Vérifier qu’aucun kernel n’a été touché (utiliser exclude: kernel* sur les opérations à risque).

Validation pytest+testinfra :

Fenêtre de terminal
ansible-playbook solution.yml
pytest -v labs/modules-paquets/dnf-options/challenge/tests/

5 tests vérifient epel-release, l’installation de htop/ncdu et la configuration du repo EPEL.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn