
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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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: truepour le nettoyage post-upgrade. - Quand utiliser
download_only: true(préparation d'opérations critiques).
Prérequis
Section intitulée « Prérequis »- Avoir lu Module package,
dnf:est le spécialiste RHEL depackage:. - 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: epelenablerepo: 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,backportsMises à jour de sécurité, security: true
Section intitulée « Mises à jour de sécurité, security: true »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: truename: '*' = 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: trueExclude, 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: trueQuand 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.
update_cache, refresh du cache des repos
Section intitulée « update_cache, refresh du cache des repos »- name: Refresh cache puis installer ansible.builtin.dnf: name: nginx state: present update_cache: truePar 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.
download_only, télécharger sans installer
Section intitulée « download_only, télécharger sans installer »- 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.
Modules de groupe, name: '@web-server'
Section intitulée « Modules de groupe, name: '@web-server' »- name: Installer le groupe Web Server (RHEL group) ansible.builtin.dnf: name: '@web-server' state: presentDNF 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.
Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
update_cache: true lent | Repos lents (CDN, network) | Mettre une fois en début de play, pas par tâche |
security: true ne trouve rien | Pas d'errata RHEL pour cette release | Vérifier dnf updateinfo list security |
exclude: kernel ne marche pas | Wildcard manquant | exclude: kernel* (avec *) |
autoremove: true supprime un paquet voulu | Dépendance qu'on croyait directe est en réalité orpheline | Vérifier avec dnf list --installed, marquer comme userinstalled si besoin |
enablerepo: ignoré silencieusement | Le repo n'existe pas dans /etc/yum.repos.d/ | Vérifier que le repo est défini (même si désactivé) |
À retenir
Section intitulée « À retenir »dnf:est plus puissant quepackage:sur RHEL, utiliser ses options spécifiques.enablerepo:active un repo temporairement, pas de modification persistante.security: trueest le pattern de patching de production, applique uniquement les errata CVE.exclude: kernel*évite de stage un kernel sans reboot programmé.autoremove: truesurstate: absentnettoie les dépendances orphelines.
Mettre en pratique
Section intitulée « Mettre en pratique »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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- 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é
aptquand le même playbook doit couvrir Debian et RHEL.