Ansible Galaxy

Ansible Galaxy est une plateforme communautaire qui permet aux utilisateurs de partager, découvrir et réutiliser des rôles et collections Ansible. C'est un dépôt centralisé où les utilisateurs peuvent publier leurs contributions et accéder à celles des autres. Le site web d'Ansible Galaxy est accessible à l'adresse suivante : https://galaxy.ansible.com/

Il est avantageux d'utiliser Ansible Galaxy pour plusieurs raisons :

  • Réutilisation : Accès à une vaste bibliothèque de rôles et collections préconçus, ce qui permet de gagner du temps et d'éviter de réinventer la roue.
  • Communauté : Bénéficier des contributions de la communauté Ansible, ce qui peut inclure des rôles pour des applications populaires, des configurations spécifiques, etc.
  • Standardisation : Utiliser des rôles bien conçus et maintenus par la communauté peut aider à standardiser les pratiques de configuration et de déploiement.
  • Facilité d'intégration : Les rôles et collections d'Ansible Galaxy peuvent être facilement intégrés dans vos propres playbooks Ansible.

Rôles et Collections

Ansible Galaxy propose deux principaux types de contenus : les rôles et les collections.

  • Rôles : Un rôle est une unité de configuration Ansible qui regroupe des tâches, des variables, des fichiers, des templates et des handlers liés à une fonctionnalité spécifique. Par exemple, un rôle peut être dédié à l'installation et à la configuration d'un serveur web. Nous avons vu les rôles au cours précédent.
  • Collections : Une collection est un ensemble de rôles, modules, plugins et autres contenus Ansible regroupés sous un même nom. Les collections permettent de distribuer et de gérer plusieurs rôles et modules liés à une application ou une technologie spécifique. Voici la structure typique d'une collection :
namespace.collection_name/
├── galaxy.yml          # Métadonnées de la collection
├── README.md
├── plugins/
│   ├── modules/       # Modules personnalisés
│   ├── filters/       # Filtres Jinja2 personnalisés
│   ├── lookups/       # Plugins de lookup
│   └── inventory/     # Plugins d'inventaire
├── roles/
│   ├── role1/
│   └── role2/
├── playbooks/
│   └── example.yml
└── docs/
    └── documentation.md

Utilisation d'Ansible Galaxy

Pour utiliser Ansible Galaxy, vous pouvez suivre ces étapes de base :

  1. Recherche de rôles/collections : Utilisez le site web d'Ansible Galaxy pour rechercher des rôles ou collections correspondant à vos besoins.
  2. Installation : Utilisez la commande ansible-galaxy pour installer des rôles ou collections. Par exemple, pour installer un rôle :
    ansible-galaxy install nom_du_role
    
    Pour installer une collection :
    ansible-galaxy collection install namespace.collection_name
    
  3. Utilisation dans les playbooks : Une fois installés, vous pouvez inclure les rôles ou collections dans vos playbooks Ansible. Par exemple, pour utiliser un rôle :
     - hosts: serveurs
       roles:
          - nom_du_role
    
    Pour utiliser une collection, vous pouvez référencer ses modules ou rôles directement dans votre playbook :
    - hosts: serveurs
      tasks:
         - name: Utiliser un module de la collection
           namespace.collection_name.module_name:
             param1: valeur1
    
  4. Publication : Si vous avez créé vos propres rôles ou collections, vous pouvez les publier sur Ansible Galaxy pour les partager avec la communauté en utilisant la commande :
    ansible-galaxy collection publish chemin_vers_la_collection
    

Fichier requirements.yml

Pour gérer les dépendances de rôles et collections dans vos projets Ansible, vous pouvez utiliser un fichier requirements.yml. Ce fichier liste les rôles et collections nécessaires pour votre projet, ce qui facilite leur installation. C'est l'équivalent d'un fichier package.json en Node.js ou requirements.txt en Python. Voici un exemple de fichier requirements.yml :

---
roles:
  - name: geerlingguy.nginx
    version: 3.1.0
  - name: geerlingguy.mysql
    version: 2.9.5
collections:
  - name: ansible.posix
    version: 1.3.0
  - name: community.general
    version: 3.4.0

Pour installer les rôles et collections listés dans le fichier requirements.yml, vous pouvez utiliser la commande suivante :

ansible-galaxy install -r requirements.yml

Création d'un rôle avec Ansible Galaxy

Pour créer un nouveau rôle avec Ansible Galaxy, vous pouvez utiliser la commande ansible-galaxy init. Cette commande génère la structure de répertoires et les fichiers nécessaires pour un rôle Ansible. Voici comment créer un nouveau rôle :

ansible-galaxy init nom_du_role

Cela créera un répertoire nom_du_role avec la structure suivante :

nom_du_role/
├── defaults/main.yml
├── files/
├── handlers/main.yml
├── meta/main.yml
├── tasks/main.yml
├── templates/
├── tests/
│   ├── inventory
│   └── test.yml
└── vars/main.yml

C'est l'équivalent de créer les fichiers et dossiers manuellement, mais de manière automatisée et standardisée. Vous pouvez ensuite remplir les fichiers avec les tâches, variables, handlers, etc., nécessaires pour votre rôle.

Collections populaires de Ansible Galaxy

Ansible Galaxy héberge de nombreuses collections populaires qui couvrent une variété de cas d'utilisation. En voici une liste non-exhaustive :

Collections officielles Ansible

ansible.builtin

  • Incluse par défaut
  • Modules de base d'Ansible
  • copy, template, service, user, etc.

ansible.posix

  • Modules pour systèmes POSIX (Linux/Unix)
  • firewalld, mount, selinux, etc.

ansible.windows

  • Modules pour Windows
  • Inclus dans Ansible Core depuis 2.10

Collections communautaires

community.general

  • Collection vaste et variée
  • Modules pour de nombreux cas d'usage
  • homebrew, snap, terraform, etc.

community.mysql

  • Gestion de MySQL/MariaDB
  • Création de bases, utilisateurs, réplication

community.postgresql

  • Gestion de PostgreSQL
  • Administration complète de PostgreSQL

community.docker

  • Gestion de Docker
  • Conteneurs, images, réseaux, volumes

community.kubernetes

  • Gestion de Kubernetes
  • Déploiements, services, configmaps

Collections cloud

amazon.aws

  • Gestion des ressources AWS
  • EC2, S3, RDS, VPC, etc.

azure.azcollection

  • Gestion Microsoft Azure
  • VM, Storage, Networks, etc.

google.cloud

  • Gestion Google Cloud Platform
  • Compute Engine, Cloud Storage, etc.