Organiser avec des rôles

AnsibleBeginner
Pratiquer maintenant

Introduction

Lorsque vous débutez avec Ansible, regrouper tout le contenu dans un grand fichier playbook.yml convient parfaitement. Mais lorsque votre automatisation atteint plusieurs centaines de lignes, ce fichier devient difficile à gérer.

La solution consiste à utiliser les rôles Ansible.

Les rôles ressemblent aux dossiers d’une armoire de classement. Au lieu d’avoir un document gigantesque, vous répartissez les éléments dans des dossiers logiques : un dossier pour les tâches du « serveur Web », un autre pour les tâches de la « base de données », etc.

Les rôles sont importants, car l’automatisation finit par relever de l’ingénierie logicielle. Dès que les playbooks dépassent quelques tâches, la structure, le nommage et la réutilisation deviennent aussi importants que la réussite de la première exécution.

Dans ce lab, vous allez :

  1. Créer une structure de rôle standard avec ansible-galaxy.
  2. Déplacer les tâches dans ce rôle.
  3. Exécuter le rôle depuis un « playbook maître » simple.

Les rôles sont importants, car une automatisation évolutive a besoin d’une structure. À mesure que la base de code grandit, son organisation devient aussi importante que la réussite de la première exécution.

Initialiser un rôle

Commencez par créer la structure des dossiers. Vous pourriez créer tous les dossiers manuellement, mais Ansible inclut un outil nommé ansible-galaxy qui s’en charge pour vous.

Cette organisation standard est utile, car elle fournit à chaque rôle des emplacements prévisibles pour les tâches, les variables, les fichiers, les modèles et les handlers. Les équipes peuvent ainsi lire plus facilement l’automatisation créée par leurs collègues lorsque cette structure reste cohérente.

Accédez au répertoire de votre projet :

cd ~/project

Créez un répertoire destiné à contenir vos rôles :

mkdir roles

Créez maintenant un rôle nommé myrole. Considérez cette étape comme la création d’un « paquet » ou d’un « module » pour votre automatisation.

ansible-galaxy init roles/myrole

Affichez ce qui a été créé :

ls -R roles/myrole

Vous verrez plusieurs dossiers (tasks, handlers, vars, etc.).

  • tasks : contient les étapes réelles, comme l’installation, le démarrage ou la copie.
  • vars : contient les variables.
  • files : contient les fichiers statiques, comme les images.

Dans ce lab, nous nous concentrerons sur le dossier tasks.

Définir les tâches du rôle

Vous devez maintenant ajouter des opérations à votre rôle. La liste principale des tâches d’un rôle se trouve dans tasks/main.yml.

Vous allez créer une tâche simple qui installe la commande tree, un utilitaire pratique pour afficher les structures de répertoires.

Ouvrez le fichier des tâches du rôle :

nano roles/myrole/tasks/main.yml

Ajoutez le contenu suivant. Remarquez que nous ne commençons pas par tasks:, car vous êtes déjà dans le fichier des tâches.

---
## tasks file for roles/myrole
- name: Ensure tree is installed
  apt:
    name: tree
    state: present
  become: yes

Différence essentielle : dans un playbook normal, vous disposez d’une section tasks:. Dans un rôle, le fichier constitue lui-même la liste des tâches ; il suffit donc de les énumérer directement.

Cette séparation explique notamment pourquoi les rôles favorisent la réutilisation. Le rôle prend en charge une partie ciblée de la logique d’automatisation, tandis que le playbook décide quand et où l’inclure.

Enregistrez le fichier, puis quittez l’éditeur.

Créer le playbook maître

Vous disposez maintenant d’un rôle, mais un rôle ne s’exécute pas tout seul. Vous devez créer un « playbook maître » pour l’appeler.

Créez un fichier nommé site.yml dans le répertoire principal de votre projet :

nano ~/project/site.yml

Ce playbook sera très court. Il indique simplement : « Sur ces hôtes, exécutez ce rôle. »

À ce stade, le playbook joue davantage le rôle d’un orchestrateur que celui d’un conteneur regroupant tous les détails. C’est précisément le changement d’architecture que les rôles sont censés apporter.

---
- hosts: localhost
  connection: local
  roles:
    - myrole

Comprendre le code :

  • roles: : au lieu de fournir une liste tasks:, vous fournissez une liste de rôles.
  • - myrole : Ansible recherche un dossier nommé myrole dans le répertoire roles/, puis exécute le contenu de tasks/main.yml.

Enregistrez le fichier, puis quittez l’éditeur.

Valider et exécuter

Avant de l’exécuter, vérifiez que vous n’avez commis aucune erreur de saisie. Ansible possède un vérificateur de syntaxe intégré.

Exécutez la commande suivante :

ansible-playbook -i inventory --syntax-check site.yml

Si tout est correct, la commande affiche simplement playbook: site.yml.

En cas d’erreur, lisez attentivement le message : il indique généralement le numéro exact de la ligne où l’indentation est incorrecte.

Exécutez maintenant le playbook :

ansible-playbook -i inventory site.yml

Vous devriez voir la tâche de votre rôle s’exécuter : TASK [myrole : Ensure tree is installed] ... changed

Résumé

Dans ce lab, vous avez appris à structurer Ansible de manière « professionnelle ».

  1. Initialiser un rôle : utiliser ansible-galaxy pour créer une structure de dossiers standard.
  2. Définir les tâches : placer votre logique dans tasks/main.yml.
  3. Utiliser le rôle : appeler le rôle depuis un playbook maître site.yml propre et simple.

À mesure que vous écrirez davantage d’automatisation, vous créerez des rôles pour chaque besoin, par exemple apache, mysql ou common, afin de rendre votre code réutilisable et facile à lire.