Ansible Galaxy
Objectifs du chapitre
- Découvrir Ansible Galaxy
- Installer des rôles et collections
- Gérer les dépendances
- Publier vos propres rôles
1 - Qu'est-ce que Ansible Galaxy ?
Vue d'ensemble
Ansible Galaxy est :
- Un hub communautaire de rôles et collections
- Un outil CLI pour gérer le contenu
- Un moyen de partager votre travail
Rôles vs Collections
| Rôles | Collections |
|---|---|
| Tâches + handlers + vars | Rôles + modules + plugins |
| Format simple | Format complet |
| Un seul objectif | Suite d'outils liés |
namespace.role | namespace.collection |
2 - Rechercher du contenu
Via le site web
Via la CLI
# Rechercher des rôles
ansible-galaxy search nginx
ansible-galaxy search postgresql --author geerlingguy
# Informations sur un rôle
ansible-galaxy info geerlingguy.nginx
# Lister les rôles installés
ansible-galaxy list
Collections populaires
| Collection | Description |
|---|---|
community.general | Modules généraux |
community.docker | Docker management |
amazon.aws | AWS resources |
azure.azcollection | Azure resources |
kubernetes.core | Kubernetes |
3 - Installer des rôles
Installation simple
# Installer un rôle
ansible-galaxy install geerlingguy.nginx
# Avec version spécifique
ansible-galaxy install geerlingguy.nginx,3.1.0
# Dans un dossier personnalisé
ansible-galaxy install geerlingguy.nginx -p roles/
Fichier requirements.yml
# requirements.yml
---
roles:
# Depuis Galaxy
- name: geerlingguy.nginx
version: "3.1.0"
- name: geerlingguy.postgresql
version: "3.4.0"
# Depuis Git
- name: my-nginx
src: https://github.com/myorg/ansible-nginx.git
scm: git
version: master
# Depuis une archive
- name: custom-role
src: https://example.com/roles/custom.tar.gz
collections:
# Collections
- name: community.docker
version: "3.4.0"
- name: amazon.aws
version: ">=5.0.0"
Installer depuis requirements
# Installer tous les rôles et collections
ansible-galaxy install -r requirements.yml
# Forcer la réinstallation
ansible-galaxy install -r requirements.yml --force
# Installer seulement les rôles
ansible-galaxy role install -r requirements.yml
# Installer seulement les collections
ansible-galaxy collection install -r requirements.yml
4 - Installer des collections
CLI
# Installer une collection
ansible-galaxy collection install community.docker
# Version spécifique
ansible-galaxy collection install community.docker:3.4.0
# Depuis un fichier tar.gz
ansible-galaxy collection install ./my_collection-1.0.0.tar.gz
# Lister les collections installées
ansible-galaxy collection list
Chemins d'installation
# Installer dans le projet
ansible-galaxy collection install community.docker -p ./collections/
# Configuration dans ansible.cfg
[defaults]
collections_paths = ./collections:~/.ansible/collections
5 - Utiliser le contenu installé
Utiliser un rôle Galaxy
# playbook.yml
---
- name: Configure web servers
hosts: webservers
become: yes
roles:
- geerlingguy.nginx
- geerlingguy.php
Utiliser une collection
---
- name: Gérer Docker
hosts: all
become: yes
collections:
- community.docker
tasks:
- name: Créer un réseau Docker
docker_network:
name: mynetwork
- name: Lancer un conteneur
docker_container:
name: nginx
image: nginx:alpine
ports:
- "80:80"
FQCN (Fully Qualified Collection Name)
tasks:
# Sans FQCN (si collection déclarée)
- name: Docker container
docker_container:
name: app
image: myapp
# Avec FQCN (recommandé)
- name: Docker container
community.docker.docker_container:
name: app
image: myapp
6 - Gérer les dépendances
Structure de projet
my-project/
├── ansible.cfg
├── requirements.yml # Dépendances
├── collections/ # Collections installées
├── roles/ # Rôles installés
├── inventory/
└── playbooks/
ansible.cfg
[defaults]
roles_path = ./roles:~/.ansible/roles
collections_paths = ./collections:~/.ansible/collections
[galaxy]
server_list = release_galaxy
ignore_certs = false
[galaxy_server.release_galaxy]
url = https://galaxy.ansible.com/
Script d'installation
#!/bin/bash
# setup.sh
echo "Installation des dépendances Ansible..."
# Installer les collections et rôles
ansible-galaxy install -r requirements.yml
# Vérifier l'installation
echo "Rôles installés:"
ansible-galaxy list
echo "Collections installées:"
ansible-galaxy collection list
echo "Setup terminé!"
7 - Créer et publier un rôle
Créer le squelette
ansible-galaxy init --init-path roles/ my_role
# Structure créée
roles/my_role/
├── README.md
├── defaults/main.yml
├─ ─ handlers/main.yml
├── meta/main.yml
├── tasks/main.yml
├── templates/
├── tests/
│ ├── inventory
│ └── test.yml
└── vars/main.yml
Configurer meta/main.yml
# meta/main.yml
---
galaxy_info:
author: votre_nom
description: Description du rôle
company: Ma Société
license: MIT
min_ansible_version: "2.10"
platforms:
- name: Ubuntu
versions:
- focal
- jammy
- name: Debian
versions:
- bullseye
- bookworm
galaxy_tags:
- nginx
- webserver
- web
dependencies: []
Publier sur Galaxy
# 1. Créer un compte sur galaxy.ansible.com
# 2. Connecter GitHub à Galaxy
# 3. Importer le rôle
# Via l'interface web Galaxy
# Ou via CLI (avec token)
ansible-galaxy login
ansible-galaxy import username repository_name
8 - Créer une collection
Initialiser
ansible-galaxy collection init mycompany.mycollection
# Structure
mycompany/mycollection/
├── docs/
├── galaxy.yml
├── plugins/
│ ├── modules/
│ ├── inventory/
│ └── filter/
├── README.md
└── roles/
galaxy.yml
# galaxy.yml
namespace: mycompany
name: mycollection
version: 1.0.0
readme: README.md
authors:
- Your Name <[email protected]>
description: Ma collection personnalisée
license:
- MIT
license_file: LICENSE
tags:
- devops
- infrastructure
repository: https://github.com/mycompany/mycollection
documentation: https://docs.example.com
homepage: https://example.com
issues: https://github.com/mycompany/mycollection/issues
dependencies:
community.general: ">=5.0.0"
Construire et publier
# Construire
ansible-galaxy collection build
# Publier
ansible-galaxy collection publish mycompany-mycollection-1.0.0.tar.gz --api-key=YOUR_KEY
9 - Private Galaxy / Automation Hub
Architecture
AWX / Automation Hub
Pour les entreprises :
- AWX : Version open source de Automation Controller
- Automation Hub : Galaxy privé (Red Hat)
Configuration multi-serveurs
# ansible.cfg
[galaxy]
server_list = automation_hub, release_galaxy
[galaxy_server.automation_hub]
url = https://hub.mycompany.com/api/galaxy/
token = my_token
[galaxy_server.release_galaxy]
url = https://galaxy.ansible.com/
10 - Bonnes pratiques
Versioning
# requirements.yml - Toujours spécifier les versions
roles:
- name: geerlingguy.nginx
version: "3.1.0" # ✅ Version fixe
collections:
- name: community.docker
version: ">=3.0.0,<4.0.0" # ✅ Range de versions
Mise à jour
# Vérifier les mises à jour
ansible-galaxy role list
ansible-galaxy collection list
# Mettre à jour
ansible-galaxy install -r requirements.yml --force
CI/CD
# .github/workflows/ansible.yml
name: Ansible CI
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install Ansible
run: pip install ansible ansible-lint
- name: Install dependencies
run: ansible-galaxy install -r requirements.yml
- name: Lint playbooks
run: ansible-lint playbooks/
Résumé
Points clés
- Utilisez requirements.yml pour gérer les dépendances
- Préférez les FQCN pour les modules de collections
- Versionnez toujours vos dépendances
- Explorez les rôles de geerlingguy (qualité)
Exercices pratiques
- Installez le rôle
geerlingguy.dockervia Galaxy - Créez un requirements.yml avec plusieurs dépendances
- Utilisez une collection dans un playbook
- Créez un squelette de rôle avec ansible-galaxy init