Appeler des roles dans un playbook
# site.yml - Playbook principal
---
- name: Configurer les serveurs web
hosts: webservers
become: yes
roles:
- nginx
- php
- app
# Avec des variables specifiques
- name: Configurer avec variables
hosts: webservers
become: yes
roles:
- role: nginx
vars:
nginx_port: 8080
nginx_server_name: app.example.com
- role: app
vars:
app_env: production
Dependances entre roles
# roles/app/meta/main.yml
---
dependencies:
- role: nginx
vars:
nginx_port: 80
- role: php
vars:
php_version: "8.1"
Ansible Galaxy : roles communautaires
# Chercher un role sur Galaxy
ansible-galaxy search nginx
# Installer un role depuis Galaxy
ansible-galaxy install geerlingguy.nginx
# Installer depuis un fichier requirements
# requirements.yml
---
roles:
- name: geerlingguy.nginx
version: "3.1.0"
- name: geerlingguy.mysql
version: "4.0.0"
# Installer toutes les dependances
ansible-galaxy install -r requirements.yml
Structure de projet recommandee
# Organisation d'un projet Ansible complet
project/
ansible.cfg
inventory/
production/
hosts
group_vars/
host_vars/
staging/
hosts
group_vars/
host_vars/
playbooks/
site.yml
webservers.yml
dbservers.yml
roles/
nginx/
php/
app/
mysql/
files/
templates/
vars/
common.yml
requirements.yml
Bonne pratique : Un role = une responsabilite unique. Ne melangez pas l'installation de Nginx et de votre application dans le meme role.