Roles Ansible
Les roles sont une manière d’organiser les playbooks pour les rendre modulaires et réutilisables. Ils regroupent les tâches, variables, templates et fichiers associés dans une structure standard.
Structure d’un role
Un role est un dossier avec la structure suivante :
myrole/ ├── defaults/ │ └── main.yml ├── files/ ├── handlers/ │ └── main.yml ├── tasks/ │ └── main.yml ├── templates/ └── vars/ └── main.yml text
- defaults : Variables par défaut (basse priorité).
- files : Fichiers statiques à copier.
- handlers : Tâches déclenchées par des notifications.
- tasks : Tâches principales.
- templates : Fichiers Jinja2 dynamiques.
- vars : Variables spécifiques au role.
Créer un role
Utilisez Ansible Galaxy pour initialiser un role :
ansible-galaxy init myrole
Exemple de role
Créez un role pour installer et configurer Apache.
Fichier myrole/tasks/main.yml :
---
- name: Installer Apache
apt:
name: apache2
state: present
update_cache: yes
become: yes
- name: Copier fichier de configuration
template:
src: httpd.conf.j2
dest: /etc/apache2/sites-available/000-default.conf
notify: Restart Apache
Fichier myrole/handlers/main.yml :
---
- name: Restart Apache
service:
name: apache2
state: restarted
become: yes
Fichier myrole/templates/httpd.conf.j2 :
Listen {{ http_port }}
ServerName {{ domain }}
DocumentRoot /var/www/html
Fichier myrole/vars/main.yml :
http_port: 80
domain: example.com
Utiliser un role
Appelez le role dans un playbook :
---
- name: Déployer serveur web
hosts: webservers
roles:
- myrole
Exécutez :
ansible-playbook -i inventory.ini playbook.yml
Partager des roles
Publiez votre role sur Ansible Galaxy :
ansible-galaxy role import myrole
Installez un role depuis Galaxy :
ansible-galaxy role install geerlingguy.apache
Bonnes pratiques
- Un role par fonction : Un role pour Apache, un autre pour MySQL, etc.
- Utilisez defaults pour les valeurs par défaut : Facilite la personnalisation.
- Testez vos roles : Utilisez Molecule pour des tests automatisés :
molecule init role myrole molecule test - Documentez : Ajoutez un fichier
README.mddans le role.