Aller au contenu
Infrastructure as Code medium

Module dnf Ansible : enablerepo, security, exclude, autoremove

65 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: present
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.

Les quatre options de cette page se jouent sur un système réel, où un dépôt manquant ou un kernel patché par erreur se voit tout de suite. Le lab vous fait activer un dépôt à la volée avec enablerepo:, appliquer les seuls errata avec security: true, protéger le noyau d'une montée de version massive via exclude:, puis nettoyer les dépendances devenues orphelines avec autoremove:. L'état final des paquets est contrôlé sur la machine, pas dans le playbook.

  • Module systemd_service : redémarrer ou recharger le service concerné une fois les errata appliqués.
  • Module cron : planifier le cycle de patching de façon idempotente plutôt que de le lancer à la main.
  • Multi-distribution : l'équivalent côté apt quand le même playbook doit couvrir Debian et RHEL.

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