Un rôle est une arborescence prédéfinie permettant d'organiser et réutiliser des tâches, variables, templates et fichiers dans une structure standardisée.
roles/
├── webservers/
│ ├── defaults/ # Variables par défaut (faible priorité)
│ │ └── main.yml
│ ├── vars/ # Variables du rôle (haute priorité)
│ │ └── main.yml
│ ├── tasks/ # Tâches principales
│ │ └── main.yml
│ ├── handlers/ # Handlers (redémarrage services)
│ │ └── main.yml
│ ├── templates/ # Fichiers Jinja2
│ │ └── nginx.conf.j2
│ ├── files/ # Fichiers statiques
│ │ └── index.html
│ ├── meta/ # Métadonnées du rôle
│ │ └── main.yml
│ ├── tests/ # Tests d'intégration
│ │ └── test.yml
│ └── README.md # Documentation
Méthode manuelle
mkdir -p roles/webservers/{defaults,vars,tasks,handlers,templates,files}
Méthode Ansible Galaxy
ansible-galaxy init webservers
Fichier roles/webservers/tasks/main.yml
name: Installation des paquets
apt:
name:
- nginx
- php-fpm
state: present
update_cache: yes
name: Déploiement de la configuration
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart nginx
name: Démarrage du service
service:
name: nginx
state: started
enabled: yes
name: Déploiement web
hosts: webservers
become: yes
roles:
common
webservers
security-hardening
name: Déploiement avec variables
hosts: webservers
roles:
role: webservers
http_port: 8080
max_clients: 500
Galaxy est la plateforme communautaire officielle où partager et télécharger des rôles Ansible créés par la communauté.
Rechercher un rôle
ansible-galaxy search nginx
Site web : https://galaxy.ansible.com
Installation directe
ansible-galaxy install geerlingguy.nginx
Installation depuis un fichier requirements.yml
ansible-galaxy install -r requirements.yml
Installation dans un répertoire spécifique
ansible-galaxy install geerlingguy.docker --roles-path ./custom_roles/
requirements.ymlroles:
name: geerlingguy.nginx
version: 3.2.0
name: geerlingguy.mysql
src: https://github.com/geerlingguy/ansible-role-mysql
collections:
name: community.general
version: ">=5.0.0"
name: ansible.posix
Une collection est un format de distribution regroupant des rôles, modules, plugins et playbooks dans un seul package installable.
| Aspect | Rôle | Collection |
|---|---|---|
| Portée | Jeu de tâches spécifique | Écosystème complet |
| Contenu | Tâches, templates, variables | Modules, plugins, rôles, playbooks |
| Distribution | Galaxy | Galaxy + private |
| Namespace | Non requis | Requis (vendor.collection) |
Installation via Galaxy
ansible-galaxy collection install community.general
Installation depuis requirements
ansible-galaxy collection install -r requirements.yml
Voir les collections installées
ansible-galaxy collection list
name: Tâche avec module collection
hosts: all
tasks:
name: Gestion user avec collection POSIX
ansible.posix.authorized_key:
user: "{{ username }}"
key: "{{ ssh_key }}"
name: Montage filesystem
community.general.mount:
path: /mnt/data
src: /dev/sdb1
fstype: ext4
state: mounted