
requirements.yml est le fichier de référence pour déclarer les rôles et collections externes utilisés par votre projet. Comme requirements.txt en Python ou package.json en Node, il pin les versions pour reproductibilité, supporte des sources mixtes (Galaxy public, Git, mirror privé), et permet la vérification cryptographique des collections.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Format complet de
requirements.yml(rôles + collections). - Pinning de version : exact, range, contraintes complexes.
- Sources : Galaxy, Git (avec branche/tag), URL, fichier local.
- Signatures cryptographiques pour intégrité.
- Workflow CI/CD : install local au projet (pas dans
~/.ansible/).
Le fichier requirements.yml complet
Section intitulée « Le fichier requirements.yml complet »---# requirements.yml — sources mixtes : Galaxy + Git + version pinning
roles: # 1. Rôle Galaxy public (version pinnée exacte) - name: geerlingguy.docker version: 7.4.4
# 2. Rôle depuis Git (branche main) - src: https://github.com/stephrobert/ansible-role-motd name: stephrobert.motd version: main
# 3. Rôle depuis Git avec tag - src: https://github.com/geerlingguy/ansible-role-postgresql name: geerlingguy.postgresql version: 4.1.0
collections: # 4. Collection avec range de version (acceptable) - name: ansible.posix version: ">=1.5.0,<2.0.0"
# 5. Collection avec version mini ouverte - name: community.general version: ">=8.0.0"
# 6. Collection pinnée par version exacte (production stricte) - name: community.crypto version: "2.20.0"
# 7. Collection avec signature (Galaxy 2024+) - name: ansible.utils version: ">=4.0.0" signatures: # En 2026, signatures GPG sur les collections Galaxy # - https://galaxy.ansible.com/api/...Installation depuis requirements.yml
Section intitulée « Installation depuis requirements.yml »# Installation par défaut (~/.ansible/...)ansible-galaxy role install -r requirements.ymlansible-galaxy collection install -r requirements.yml
# Installation locale au projet (recommandé CI/CD)ansible-galaxy role install -r requirements.yml -p ./roles/ansible-galaxy collection install -r requirements.yml -p ./collections/Une seule commande pour tout :
# Si requirements.yml a 'roles:' ET 'collections:'ansible-galaxy install -r requirements.ymlSources possibles
Section intitulée « Sources possibles »Source 1 — Galaxy public (par défaut)
Section intitulée « Source 1 — Galaxy public (par défaut) »roles: - name: geerlingguy.docker # ← namespace.role_name version: 7.4.4ansible-galaxy télécharge depuis galaxy.ansible.com.
Source 2 — Git (branche, tag, commit)
Section intitulée « Source 2 — Git (branche, tag, commit) »roles: - src: https://github.com/geerlingguy/ansible-role-nginx name: geerlingguy.nginx # ← nom local utilisé dans le code version: 3.1.0 # ← tag Git, branche, ou SHA40Versions acceptées :
- Tag :
version: 3.1.0 - Branche :
version: main - SHA40 commit :
version: a1b2c3d...
Source 3 — Git non-Galaxy (rôle privé)
Section intitulée « Source 3 — Git non-Galaxy (rôle privé) »roles: - src: git@gitlab.corp.example.com:ansible/role-internal.git scm: git name: corp.internal_role version: v2.5.0scm: git force le SCM (par défaut auto-détecté depuis l’URL).
Source 4 — URL d’archive
Section intitulée « Source 4 — URL d’archive »roles: - src: https://example.com/releases/role-v1.0.tar.gz name: example.roleTéléchargement direct d’une archive — utile pour les rôles internes hostés sur un serveur de fichiers.
Pinning de version — patterns
Section intitulée « Pinning de version — patterns »| Forme | Effet | Quand l’utiliser |
|---|---|---|
version: 1.2.3 | Version exacte | Production — reproductibilité totale |
version: ">=1.2.0,<2.0.0" | Range mineur | Acceptable — laisse passer patches |
version: "*" | Toute version (= dernière) | ⚠️ AVOID — surprises garanties |
version: ">=1.2.0" | Plus récent que 1.2.0 | ⚠️ Risqué pour breaking changes |
version: main | Dernière de la branche main | Dev seulement, jamais en prod |
Règle d’or : pinning exact en production, range mineur en dev/staging.
Signatures cryptographiques (Galaxy 2024+)
Section intitulée « Signatures cryptographiques (Galaxy 2024+) »Depuis 2024, les collections Galaxy peuvent être signées GPG. Vérification auto :
collections: - name: ansible.posix version: 1.6.2 signatures: - https://galaxy.ansible.com/api/v3/.../signatures/abc123ansible-galaxy collection install -r requirements.yml vérifie la signature avant install. Si la signature ne matche pas → install échoue.
Mandatory dans les contextes sécurité (banque, défense, santé).
Pattern projet — installation locale
Section intitulée « Pattern projet — installation locale »projet/├── ansible.cfg├── requirements.yml├── roles/ ← installé via -p ./roles/│ ├── geerlingguy.docker/│ └── stephrobert.motd/├── collections/ ← installé via -p ./collections/│ └── ansible_collections/│ ├── ansible/│ └── community/└── playbooks/# ansible.cfg[defaults]roles_path = ./rolescollections_path = ./collectionsAvantage : un git clone du projet + ansible-galaxy install -r requirements.yml -p ./roles/ reproduit exactement l’environnement. Aucune dépendance globale ~/.ansible/.
Workflow CI/CD typique
Section intitulée « Workflow CI/CD typique »# .gitlab-ci.yml ou .github/workflows/test.yml- pip install ansible-core>=2.16- ansible-galaxy collection install -r requirements.yml -p ./collections/- ansible-galaxy role install -r requirements.yml -p ./roles/- ansible-playbook playbooks/site.ymlPratiquer dans le lab
Section intitulée « Pratiquer dans le lab »Cette page a un lab d’accompagnement : labs/galaxy/installer-roles/ dans
stephrobert/ansible-training.
Le lab fournit un requirements.yml mixte (Galaxy public + Git + collections). 6 tests structure validés (rôles pinnés, sources Git, collection pinnée stricte).
cd ~/Projets/ansible-training/labs/galaxy/installer-roles/
cat requirements.ymlpytest -v challenge/tests/ # 6 testsPièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
Role not found in [requirements.yml] | Faute de frappe sur le namespace.name | Vérifier sur galaxy.ansible.com |
| Build cassé après mise à jour | Pas de pinning | Pinner avec version: X.Y.Z exacte |
git clone rate sur source privée | Auth SSH manquante côté runner CI | Configurer ~/.ssh/known_hosts + clé déployée |
| Collection installée 2 fois | ~/.ansible/ ET ./collections/ | Choisir une seule source via collections_path |
| Signatures rejetées | Galaxy 2024+ et signature absente | Ajouter signatures: ou désactiver vérif (debug) |
À retenir
Section intitulée « À retenir »requirements.yml= source unique pour les dépendances rôles + collections.- Pinning exact (
version: 1.2.3) en production. -p ./roles/+-p ./collections/= installation locale projet (reproductibilité).- Sources : Galaxy, Git (tag/branche/SHA), URL d’archive.
- Signatures GPG mandatory en contexte sécurité.