Aller au contenu principal

Les rôles Ansible

Introduction

Les rôles Ansible sont un moyen de structurer et de réutiliser votre code Ansible. Ils sont constitués d'un ensemble de tâches, de variables et de fichiers de configuration qui sont regroupés ensemble pour effectuer une opération spécifique.

Les rôles Ansible offrent de nombreux avantages, notamment :

  • Réutilisation : Les rôles peuvent être réutilisés sur plusieurs serveurs ou applications. Cela permet de gagner du temps et des efforts lors de la configuration de vos systèmes.
  • Modularité : Les rôles peuvent être divisés en tâches plus petites et plus faciles à comprendre. Cela facilite la maintenance et la mise à jour de votre code Ansible.
  • Testabilité : Les rôles peuvent être facilement testés de manière isolée. Cela permet de garantir que votre code fonctionne correctement avant de le déployer sur vos systèmes.

Création d'un rôle Ansible

Pour créer vos rôles Ansible, placez vous dans votre dossier ansible/playbooks et créez un nouveau dossier roles :

mkdir mon_roles && cd mon_roles

Je vais vous présenter la structure des dossiers et fichiers que vous pouvez créer dans votre dossier roles:

Schema arborescence rôle Ansible

  • tasks/main.yml : Ce fichier contient les tâches qui seront exécutées par le rôle.

Voici un exemple de fichier tasks/main.yml :

- name: install apache
ansible.builtin.apt:
name: apache2
state: present
update_cache: yes

- name: copy index.html file
ansible.builtin.copy:
src: index.html
dest: /var/www/html/
notify: restart apache

- name: deploie le template
ansible.builtin.template:
src: test.conf.j2
dest: /root/readme.txt
  • vars/main.yml : Ce fichier contient les variables qui peuvent être utilisées par les tâches du rôle.

Voici un exemple de fichier vars/main.yml :

vhost_name: mon_site
vhost_port: 80
  • files/index.html : Le dossier files contient les fichiers utilisés par le rôle, ici le fichier index.html est copié vers /var/www/html/ dans la précédente tache.

  • handlers/main.yml : Ce fichier contient des taches supplémentaires indépendante qui peuvent être appelés dans notre fichier de taches. comme ci-dessus avec la mention notify: restart apache qui va redémarrer le service apache2.

Voici un exemple de fichier handlers/main.yml :

---
- name: restart apache
ansible.builtin.systemd_service:
name: apache2
state: restarted
  • templates/test.conf.j2 : Ce fichier contient des templates de configuration dynamique utilisés par le rôle, par convention ils ont une extension .j2.
Le nom de ton vhost est {{ vhost_name }}
  • meta/main.yml : Ce fichier contient les metadatas comme les dépendances associées au role.

Utilisation d'un rôle Ansible

Pour utiliser un rôle Ansible, vous devez l'importer dans votre playbook Ansible. Vous pouvez le faire en utilisant roles:, comme dans l'exemple ci-dessous :

- name: Apache
hosts: all
remote_user: root
tasks:
roles:
- mon_role

Cette directive indique à Ansible d'exécuter toutes les tâches du rôle mon_role sur tous les serveurs spécifiés dans le groupe all.

Dépendances

Les rôles Ansible peuvent dépendre d'autres rôles. Cela permet de réutiliser du code et de simplifier la structure de votre playbook.

Pour spécifier une dépendance, vous pouvez utiliser la directive dependencies dans le fichier meta/main.yml du rôle.

Variables

Les variables peuvent être utilisées pour personnaliser le comportement des rôles Ansible. Vous pouvez définir des variables a plusieurs niveaux dans le fichier playbooks, inventory, files ou dans les roles.
Vous pouvez définir une variable simple avec la syntaxe YAML suivante :

install_path: /opt/my_app

Les variables peuvent être utilisées avec la syntaxe Jinja2, comme dans l'exemple ci-dessous :

ansible.builtin.template:
src: test.conf.j2
dest: '{{ install_path }}/test.conf'

Ansible Galaxy

Ansible Galaxy est une ressource précieuse pour les utilisateurs d'Ansible, leur permettant d'accéder à une bibliothèque de rôles, de partager leurs propres contributions et de gagner du temps dans le développement de leurs playbooks.

Pour initialiser la structure de votre rôle, exécutez la commande suivante :

ansible-galaxy init mon_role

Conclusion

Les rôles Ansible sont un outil puissant qui peut vous aider à automatiser vos tâches d'administration. Ils offrent de nombreux avantages, notamment la réutilisation, la modularité et la testabilité.

Ressources supplémentaires

  • Documentation Ansible sur les rôles: ici
  • Collection de rôles Ansible Galaxy: ici