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 package, dnf: 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.

- 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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn