
Un projet Ansible mature versionne ses dépendances dans requirements.yml. Le fichier liste les collections et rôles utilisés, leur source (Galaxy, Git, URL tarball, chemin local), leur version pinnée (semver strict), et optionnellement leurs signatures GPG détachées pour la chaîne supply-chain. Sans ce fichier, un projet dérive au fil des releases upstream et casse en prod sans avertissement.
Cette page couvre les 4 sources acceptées par ansible-galaxy, la syntaxe complète, la vérification d’intégrité avec ansible-galaxy collection verify, et la configuration ansible.cfg [galaxy] pour cibler plusieurs serveurs (Galaxy + Automation Hub privé).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 4 sources dans
requirements.yml: Galaxy, Git, URL tarball, chemin local. - Pinning strict par tag, branche ou SHA Git.
ansible-galaxy collection install -r ... -p <chemin>pour isolation projet.ansible-galaxy collection verifypour intégrité (checksums + signatures GPG).- Multi-serveur Galaxy + Automation Hub via
ansible.cfg [galaxy]. - Pattern airgap : signatures GPG +
--keyring+--offline.
Prérequis
Section intitulée « Prérequis »- Avoir lu Découvrir une collection.
- Ansible 2.13+ (signatures GPG depuis 2.13).
Le fichier requirements.yml — toutes les sources
Section intitulée « Le fichier requirements.yml — toutes les sources »---collections: # SOURCE 1 — Galaxy public (default) - name: ansible.posix version: "2.0.0"
- name: community.general version: "10.5.0" source: https://galaxy.ansible.com # explicite (default)
# SOURCE 2 — Git (tag, branche ou SHA40) - name: https://github.com/ansible-collections/community.docker.git type: git version: "4.0.0" # tag (recommandé) # OU version: main (branche, déconseillé en prod) # OU version: abc1234567890abcdef... (SHA40, reproductibilité absolue)
# SOURCE 3 — URL tarball - name: https://example.com/dist/acme-webapp-1.4.2.tar.gz type: url
# SOURCE 4 — chemin local (dev) - name: /home/bob/dev/acme.webapp type: dir
# OVERRIDE de namespace lors de l'install - name: namespace.collection type: galaxy source: https://my-hub.acme.local/api/galaxy/
roles: # Rôles standalone Galaxy v1 (legacy mais encore supportés) - name: geerlingguy.docker version: "7.4.0"🔍 Observation : un seul fichier centralise toutes les dépendances. Le placer dans requirements.yml à la racine du projet, le versionner dans Git, l’utiliser dans la CI et l’EE.
Sources Git — tag vs branche vs SHA
Section intitulée « Sources Git — tag vs branche vs SHA »Format version: | Exemple | Cas d’usage |
|---|---|---|
| Tag Git | version: v1.2.3 | Production stable (recommandé) |
| Branche | version: main | Dev rapide, déconseillé en prod |
| SHA40 | version: abc1234567890abcdef... | Reproductibilité absolue |
🔍 Observation cruciale : pinner par branche = drift garanti dès qu’un commit upstream casse votre pipeline. Toujours tag ou SHA en prod.
Installation depuis requirements.yml
Section intitulée « Installation depuis requirements.yml »ansible-galaxy collection install \ -r requirements.yml \ -p ./local_collections \ --forceOptions clés :
| Option | Effet |
|---|---|
-r requirements.yml | Lit le fichier de dépendances |
-p <chemin> | Installe localement au projet (pas dans ~/.ansible/) |
--force | Réinstalle même si version déjà présente |
--upgrade | Upgrade vers la dernière version compatible avec les contraintes |
--keyring <path> | Chemin du keyring GPG pour signatures |
--offline | N’appelle pas le serveur (utile airgap) |
🔍 Observation : -p <chemin> isole les collections par projet. Versionner le local_collections/ dans .gitignore, mais versionner le requirements.yml. Permet d’avoir 3 projets avec 3 versions différentes de community.general sans conflit.
ANSIBLE_COLLECTIONS_PATH
Section intitulée « ANSIBLE_COLLECTIONS_PATH »Une fois installées en local :
export ANSIBLE_COLLECTIONS_PATH=./local_collectionsansible-galaxy collection list -p ./local_collectionsOu dans ansible.cfg :
[defaults]collections_path = ./local_collections🔍 Observation : la variable d’env utilise : comme séparateur (comme $PATH). Permet d’enchaîner plusieurs paths avec priorité au premier.
Vérification d’intégrité
Section intitulée « Vérification d’intégrité »ansible-galaxy collection verify \ -r requirements.yml \ -p ./local_collectionsSortie :
Verifying 'ansible.posix:2.0.0'.Found ansible.posix at /home/.../local_collections/ansible_collections/ansible/posixSuccessfully verified that checksums for 'ansible.posix:2.0.0' match the remote collection🔍 Observation : verify compare les checksums SHA-256 des fichiers locaux avec ceux du serveur. Détecte une corruption (disque, modification manuelle) ou une substitution (attaque supply-chain). À automatiser en CI : ansible-galaxy collection verify -r requirements.yml || exit 1.
Signatures GPG détachées
Section intitulée « Signatures GPG détachées »Pour les collections certifiées Red Hat ou les forks privés signés :
collections: - name: community.general version: "10.5.0" signatures: - https://galaxy.ansible.com/api/v3/.../detached_signature.asc - file:///etc/ansible/sigs/community-general-10.5.0.ascansible-galaxy collection install \ -r requirements.yml \ --keyring /etc/ansible/trustedkeys.gpgVariables associées :
| Variable | Effet |
|---|---|
GALAXY_REQUIRED_VALID_SIGNATURE_COUNT | Nombre minimum de signatures valides (+1, +all) |
GALAXY_DISABLE_GPG_VERIFY | 1 désactive (debug uniquement) |
--keyring <path> | Chemin vers le keyring GPG de confiance |
🔍 Observation : exige ansible-core ≥ 2.13. Sans --keyring, l’install échoue si signatures déclarées. Pattern essentiel pour airgap signé (verify offline avec --offline).
Multi-serveur — Galaxy + Automation Hub
Section intitulée « Multi-serveur — Galaxy + Automation Hub »Pour cibler plusieurs registres (Galaxy public + Hub privé), configurer ansible.cfg :
[galaxy]server_list = automation_hub, validated, galaxy
[galaxy_server.automation_hub]url=https://console.redhat.com/api/automation-hub/content/published/auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/tokentoken=<offline-token>
[galaxy_server.validated]url=https://console.redhat.com/api/automation-hub/content/validated/auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/tokentoken=<offline-token>
[galaxy_server.galaxy]url=https://galaxy.ansible.com/🔍 Observation : ordre = priorité. Si une collection existe sur les 3, c’est celle d’automation_hub qui l’emporte (Red Hat certified). Pattern entreprise standard.
Pour ansible-builder (EE)
Section intitulée « Pour ansible-builder (EE) »Variables d’env équivalentes pour les Execution Environments :
ANSIBLE_GALAXY_SERVER_LIST=automation_hub,galaxyANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_URL=https://...ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN=<offline-token>ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_AUTH_URL=https://...Permet à ansible-builder build de résoudre les dépendances depuis le hub privé pendant le build de l’EE custom.
Lab pratique
Section intitulée « Lab pratique »Le lab collections/requirements (labs/collections/requirements/) reproduit ce parcours avec un challenge qui combine 3 sources (Galaxy + Git + URL/dir) et 4 tests pytest structurels.
À retenir
Section intitulée « À retenir »requirements.ymlcentralise toutes les dépendances Ansible.- 4 sources : Galaxy (default),
type: git,type: url,type: dir. - Pinning strict par tag ou SHA — jamais par branche en prod.
-p <chemin>isole les collections au niveau projet.ansible-galaxy collection verifydétecte corruptions et substitutions.- Signatures GPG via
signatures:+--keyringpour la chaîne supply-chain. - Multi-serveur via
ansible.cfg [galaxy]ou variablesANSIBLE_GALAXY_SERVER_*.