Aller au contenu principal

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ôlesCollections
Tâches + handlers + varsRôles + modules + plugins
Format simpleFormat complet
Un seul objectifSuite d'outils liés
namespace.rolenamespace.collection

2 - Rechercher du contenu

Via le site web

👉 https://galaxy.ansible.com

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

CollectionDescription
community.generalModules généraux
community.dockerDocker management
amazon.awsAWS resources
azure.azcollectionAzure resources
kubernetes.coreKubernetes

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

  1. Installez le rôle geerlingguy.docker via Galaxy
  2. Créez un requirements.yml avec plusieurs dépendances
  3. Utilisez une collection dans un playbook
  4. Créez un squelette de rôle avec ansible-galaxy init

← Templates | Exercices et projets →