Aller au contenu
Infrastructure as Code medium

Installer des rôles depuis Galaxy : requirements.yml et pinning

10 min de lecture

Logo Ansible

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.

  • 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/).
---
# 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/...
Fenêtre de terminal
# Installation par défaut (~/.ansible/...)
ansible-galaxy role install -r requirements.yml
ansible-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 :

Fenêtre de terminal
# Si requirements.yml a 'roles:' ET 'collections:'
ansible-galaxy install -r requirements.yml
roles:
- name: geerlingguy.docker # ← namespace.role_name
version: 7.4.4

ansible-galaxy télécharge depuis galaxy.ansible.com.

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 SHA40

Versions acceptées :

  • Tag : version: 3.1.0
  • Branche : version: main
  • SHA40 commit : version: a1b2c3d...
roles:
- src: git@gitlab.corp.example.com:ansible/role-internal.git
scm: git
name: corp.internal_role
version: v2.5.0

scm: git force le SCM (par défaut auto-détecté depuis l’URL).

roles:
- src: https://example.com/releases/role-v1.0.tar.gz
name: example.role

Téléchargement direct d’une archive — utile pour les rôles internes hostés sur un serveur de fichiers.

FormeEffetQuand l’utiliser
version: 1.2.3Version exacteProduction — reproductibilité totale
version: ">=1.2.0,<2.0.0"Range mineurAcceptable — 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: mainDernière de la branche mainDev seulement, jamais en prod

Règle d’or : pinning exact en production, range mineur en dev/staging.

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/abc123

ansible-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é).

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 = ./roles
collections_path = ./collections

Avantage : un git clone du projet + ansible-galaxy install -r requirements.yml -p ./roles/ reproduit exactement l’environnement. Aucune dépendance globale ~/.ansible/.

Fenêtre de terminal
# .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.yml

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).

Fenêtre de terminal
cd ~/Projets/ansible-training/labs/galaxy/installer-roles/
cat requirements.yml
pytest -v challenge/tests/ # 6 tests
SymptômeCauseFix
Role not found in [requirements.yml]Faute de frappe sur le namespace.nameVérifier sur galaxy.ansible.com
Build cassé après mise à jourPas de pinningPinner avec version: X.Y.Z exacte
git clone rate sur source privéeAuth SSH manquante côté runner CIConfigurer ~/.ssh/known_hosts + clé déployée
Collection installée 2 fois~/.ansible/ ET ./collections/Choisir une seule source via collections_path
Signatures rejetéesGalaxy 2024+ et signature absenteAjouter signatures: ou désactiver vérif (debug)
  • 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é.

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