Passer au contenu principal

Organisation (Ansible)

Collections et Galaxy

Ansible Galaxy et le système de collections permettent de réutiliser du code Ansible publié par la communauté ou par Red Hat. Gérer ses dépendances de rôles et collections via un fichier requirements.yml versionné est une pratique de base pour tout projet sérieux.

Rôles Galaxy vs Collections

Historiquement, Ansible Galaxy distribuait des rôles individuels. Depuis Ansible 2.9, les collections sont le format privilégié : elles regroupent des modules, des plugins, des rôles et des playbooks dans un namespace unifié (namespace.collection).

  • Rôles Galaxy : toujours disponibles, nombreux, qualité variable
  • Collections : format standardisé, versionnées, namespace clair, support des modules custom

Collections intégrées

Ansible installe par défaut la collection ansible.builtin qui contient les modules essentiels (apt, copy, template, service, etc.). D'autres collections sont disponibles hors-boîte selon la version d'Ansible installée :

  • ansible.posix : modules POSIX (authorized_key, firewalld, sysctl, mount)
  • ansible.utils : utilitaires (manipulation IP, validation)
  • community.general : modules communautaires généraux (docker_container, ufw, etc.)
  • community.postgresql : gestion PostgreSQL
  • community.mysql : gestion MySQL/MariaDB
  • amazon.aws : AWS
  • google.cloud : GCP
  • azure.azcollection : Azure

requirements.yml : gérer les dépendances

# requirements.yml
---
collections:
  - name: community.general
    version: ">=7.0.0"
  - name: community.postgresql
    version: "3.4.0"
  - name: ansible.posix
  - name: netbox.netbox
    version: ">=3.14.0"

roles:
  - name: geerlingguy.docker
    version: "7.1.0"
  - name: geerlingguy.nginx
# Installer toutes les dépendances
ansible-galaxy install -r requirements.yml
ansible-galaxy collection install -r requirements.yml

# Ou les deux en une commande (Ansible 2.10+)
ansible-galaxy install -r requirements.yml

Installation et chemins

# Installer une collection dans le projet (recommandé pour la reproductibilité)
ansible-galaxy collection install community.general -p ./collections/

# Installer globalement
ansible-galaxy collection install community.general

# Lister les collections installées
ansible-galaxy collection list

Pour un projet d'équipe, l'installation dans ./collections/ et ./roles/ avec un requirements.yml versionné garantit que tout le monde utilise les mêmes versions. Ajouter ces répertoires au .gitignore et laisser chaque utilisateur lancer ansible-galaxy install -r requirements.yml.

Utiliser une collection

# Nom complet
- community.general.ufw:
    rule: allow
    port: 443
    proto: tcp

# Import de collection en tête de playbook (évite le préfixe)
- hosts: all
  collections:
    - community.general
  tasks:
    - ufw:
        rule: allow
        port: 443

Utilisation offline

Dans des environnements sans accès Internet, les collections peuvent être téléchargées sous forme d'archive et installées localement :

# Télécharger sans installer
ansible-galaxy collection download community.general -p /tmp/collections/

# Installer depuis une archive locale
ansible-galaxy collection install /tmp/collections/community-general-7.0.0.tar.gz