Aller au contenu

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.md dans le role.

Ressources