Aller au contenu
Infrastructure as Code medium

Collections Ansible : FQCN, requirements.yml, ansible-galaxy, Galaxy public vs Automation Hub

9 min de lecture

Logo Ansible

Une collection est l'unité de distribution moderne d'Ansible : elle empaquette modules, plugins (filter, lookup, inventory, callback...), rôles, playbooks, docs et tests sous un même namespace versionné. Depuis ansible-core 2.10, les collections remplacent définitivement les rôles standalone Galaxy v1 ; en 2026, Galaxy NG (Galaxy v3) ne supporte que les collections. Cette section couvre le parcours collections RHCE 2026 : FQCN, requirements.yml multi-sources, création d'une collection custom, pipeline CI, et migration rôle → collection.

  • Comprendre ce qu'est une collection (vs rôle), structure plugins/, roles/, meta/runtime.yml.
  • FQCN (Fully Qualified Collection Name) obligatoire en 2026 (ansible.builtin.copy, community.general.archive).
  • Installer des collections depuis Galaxy, Git, URL tarball, chemin local via requirements.yml.
  • Vérifier l'intégrité avec ansible-galaxy collection verify et signatures GPG.
  • Créer votre propre collection avec un module Python custom + rôle + playbook.
  • Tester la collection en CI avec ansible-test sanity --docker.
  • Migrer un rôle standalone vers une collection sans casser les playbooks downstream.

Avant cette section, vous devez avoir validé :


Mon retour d'expérience — pour ceux qui veulent comprendre

Section intitulée « Mon retour d'expérience — pour ceux qui veulent comprendre »

Si l'une des cartes en haut de page vous a déjà orienté, vous êtes parti sur le bon pied. La suite de cette page s'adresse à ceux qui veulent comprendre la philosophie de cette section : pourquoi le passage aux collections n'est pas négociable en 2026, pourquoi le FQCN est un investissement et non un caprice, et pourquoi je refuse certains raccourcis classiques.

J'ai migré plusieurs projets Ansible legacy de rôles Galaxy v1 vers collections entre 2021 et 2025. Le verdict : plus on attend, plus la migration coûte cher. Les playbooks downstream qui pointent vers geerlingguy.nginx au lieu de community.general.* finissent par casser silencieusement quand Galaxy NG retire le support v1. Les sections qui suivent compilent ce que je n'aurais jamais accepté de relâcher dans un projet qui se respecte.

Pourquoi les collections ont remplacé les rôles standalone

Section intitulée « Pourquoi les collections ont remplacé les rôles standalone »

Trois raisons motivent le passage aux collections en 2026 :

  • Plusieurs ressources sous un même namespace versionné : un rôle Galaxy v1 ne distribuait qu'une chose. Une collection en distribue N (modules + rôles + plugins + playbooks) avec un cycle de release unique.
  • FQCN obligatoire : éviter les conflits de noms entre auteurs (ansible.posix.firewalld vs community.general.firewalld). Le namespace est propriété d'un mainteneur, comme un username GitHub.
  • Galaxy NG (Pulp-based, 2026) ne supporte plus les rôles standalone Galaxy v1. Toute nouvelle distribution doit être en collection.
OutilRôle
ansible-galaxy collection initGénère la structure complète conforme
ansible-galaxy collection install -r requirements.ymlInstalle les dépendances
ansible-galaxy collection list / infoInspecte ce qui est installé
ansible-galaxy collection verifyVérifie l'intégrité (checksums, signatures GPG)
ansible-galaxy collection buildProduit le tarball publiable
ansible-galaxy collection publishPousse sur Galaxy (token API)
ansible-test sanity --docker defaultValidation FQCN + doc + types + PEP8
ansible-test units --dockerTests pytest sur modules Python
antsibull-changelog releaseGénère CHANGELOG.rst depuis fragments
CritèreGalaxy publicAutomation Hub (AAP 2.5/2.6)
CoûtGratuitInclus subscription AAP
Contenucommunity.* ouvertesCertified Content Red Hat + partenaires + Validated Content
SupportAucunSLA Red Hat sur certified
Signatures GPGOptionnelActivé par défaut
Scan vulnérabilitésNonTrivy + scans CVE auto
Cas d'usage 2026Open-source, dev, formationProduction entreprise sous contrat

Décision pratique :

  • Formation, dev, projets open-source → Galaxy public.
  • Production entreprise sous contrat Red Hat → Automation Hub (collections certifiées + scannées).
  • Hub privé interne → Galaxy NG self-hosted (Pulp-based, gratuit), pour airgap ou multi-équipe.

Cinq positions tranchées que cette section assume :

  • FQCN partout, sans exception, dès la première ligne d'un nouveau playbook. ansible.builtin.copy est plus long de 14 caractères mais évite les shadowing silencieux quand une collection installée plus tard redéfinit copy. Lisibilité + futur-proofing — c'est aussi un objectif RHCE 2026.
  • requirements.yml versionné dans Git, dépendances pinnées par version (version: 1.2.3) ou par SHA Git (version: a3f9b2c). Jamais main ou latest en production : drift garanti, debug impossible 6 mois plus tard.
  • ansible-test sanity au vert avant tout commit sur la branche principale. Pas de relâchement : un avertissement de doc manquante aujourd'hui devient une erreur bloquante demain. Le pre-commit hook règle le problème dès l'écriture.
  • Migration progressive rôle → collection avec plugin_routing.redirect. Renommer un module sans redirect casse silencieusement les playbooks downstream — vos utilisateurs n'apprécieront pas. Le redirect + warning donne 1-2 cycles de release pour migrer.
  • Galaxy public pour open-source, Automation Hub pour entreprise. Pas de mélange. Une collection certifiée Red Hat scannée Trivy sur Hub apporte un SLA que Galaxy public ne donnera jamais. Choisissez l'outil selon le contexte, pas selon l'habitude.

Cinq anti-patterns observés en revue de code et en mission :

  • Pinner par branche Git (version: main) en production. Drift garanti : la branche évolue sous vos pieds, les playbooks « marchent » jusqu'au jour où ils ne marchent plus, sans changelog côté votre repo. Tag ou SHA, point.
  • Renommer un module ou un plugin sans plugin_routing.redirect. Vous cassez tous les playbooks downstream sans signal. Le redirect + warning est non négociable pour toute évolution publique.
  • build_ignore: mal configuré → tarball gonflé par .git/, .venv/, secrets de tests, fichiers IDE. La collection devient lourde à télécharger et leak des données sensibles. Vérifier après chaque build.
  • Oublier meta/runtime.yml dès qu'on ajoute un module Python custom. ansible-test sanity échoue, la collection refuse l'install. Mandatory dès le premier module.
  • Publier sans CHANGELOG.rst. Les utilisateurs ne savent pas ce qui change, n'osent pas mettre à jour. antsibull-changelog + fragments par PR génère un changelog propre — non négociable pour tout projet sérieux.
  • Une collection = plugins/ + roles/ + playbooks/ + meta/runtime.yml + galaxy.yml.
  • FQCN obligatoire en 2026 : namespace.collection.plugin.
  • requirements.yml = source unique des dépendances (Galaxy/Git/URL/dir + pinning).
  • ansible-galaxy collection init génère la structure complète conforme.
  • ansible-test sanity --docker default = validation pré-publication.
  • plugin_routing.redirect dans meta/runtime.yml = rétrocompatibilité après renaming.
  • Galaxy public pour open-source, Automation Hub pour production entreprise.

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