Rédiger votre premier playbook

AnsibleBeginner
Pratiquer maintenant

Introduction

Dans le lab précédent, vous avez exécuté une seule commande (ansible ... -m ping). Cette méthode est utile pour effectuer des vérifications rapides, mais la véritable puissance d’Ansible réside dans les playbooks.

Un playbook est un fichier texte qui contient des instructions d’automatisation. Contrairement à un script shell classique, un playbook se concentre généralement sur l’état final souhaité plutôt que sur chaque commande exécutée à bas niveau.

Ce modèle fondé sur l’état souhaité est l’une des notions les plus importantes d’Ansible. Au lieu d’indiquer « exécuter exactement ces commandes », vous décrivez généralement la condition qui doit être vraie à la fin de l’automatisation.

Les playbooks sont écrits en YAML, un format de données lisible par les humains. Cela facilite la relecture, le partage et la maintenance de l’automatisation.

Dans ce lab, vous allez rédiger un playbook qui transforme un serveur en serveur web en :

  1. installant Nginx (un serveur web très répandu) ;
  2. vérifiant que le service Nginx est en cours d’exécution.

Vous exécuterez ensuite ce playbook pour configurer votre machine locale.

Créer le fichier du playbook

Commencez par créer le fichier du playbook. Par convention, le playbook principal est souvent nommé site.yml.

Vérifiez d’abord que vous vous trouvez dans le répertoire du projet :

cd ~/project

Créez ensuite un fichier nommé site.yml et ouvrez-le avec l’éditeur de texte nano :

nano site.yml

Tout en haut du fichier, saisissez trois tirets. Ils marquent le début d’un document YAML.

---

Règles YAML à retenir :

  • L’indentation est essentielle ! Utilisez des espaces (généralement 2), et non des tabulations. Si l’indentation est incorrecte, Ansible signalera une erreur.
  • Enregistrez souvent le fichier. Dans nano, appuyez sur Ctrl+O, puis sur Entrée pour enregistrer, mais laissez le fichier ouvert pour les étapes suivantes.

Définir le play

Un playbook se compose d’un ou de plusieurs « plays ». Un play associe un groupe d’hôtes aux tâches que vous souhaitez exécuter sur ces hôtes.

Cette association entre un groupe d’hôtes et des tâches permet au même playbook de s’appliquer aussi bien à une seule machine qu’à plusieurs. La logique reste centralisée, tandis que l’inventaire détermine où elle s’applique.

Dans votre fichier site.yml, ajoutez les lignes suivantes sous ---.

---
- hosts: webservers
  become: yes

Comprendre le code :

  • - hosts: webservers : indique à Ansible « exécuter ces instructions sur chaque serveur répertorié dans le groupe [webservers] de mon inventaire ».
  • become: yes : revient à saisir sudo avant une commande. Cette directive donne à Ansible les privilèges root nécessaires pour installer des logiciels.

Vérifiez que - hosts commence tout au début de la ligne, sans espace avant le tiret.

Enregistrez le fichier (Ctrl+O, Entrée).

Ajouter une tâche d’installation

Vous devez maintenant indiquer à Ansible quoi faire. Pour cela, ajoutez une liste de tâches. Chaque tâche utilise un module.

Comme vous travaillez sous Ubuntu, vous allez utiliser le module apt pour installer Nginx.

Modifiez site.yml afin d’obtenir le contenu suivant :

---
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

Comprendre le code :

  • tasks: : commence la liste des tâches.
  • - name: ... : fournit une description destinée aux humains. Elle s’affichera à l’écran lors de l’exécution du playbook.
  • apt: : appelle le module apt.
  • name: nginx : indique le paquet souhaité.
  • state: present : constitue la partie « déclarative » essentielle. Vous ne dites pas « installez-le maintenant », mais « assurez-vous qu’il est présent ».
    • S’il est absent, Ansible l’installe.
    • S’il est déjà installé, Ansible ne fait rien. Cette propriété s’appelle l’idempotence.

L’idempotence est essentielle à la gestion de la configuration. Elle signifie que vous pouvez exécuter la même automatisation plusieurs fois en toute sécurité et obtenir des résultats cohérents, sans effets secondaires dupliqués.

Vérifiez l’indentation :

  • tasks doit être aligné sur become.
  • - name doit être indenté de 2 espaces.
  • apt doit être aligné sur name.
  • name et state doivent être davantage indentés sous apt.

Enregistrez le fichier.

Ajouter une tâche de gestion du service

Installer le logiciel ne suffit pas : vous devez également vérifier que le programme est en cours d’exécution. Pour cela, utilisez le module service.

Cet exemple montre aussi comment les playbooks expriment l’état du système par couches. Une tâche vérifie que le paquet existe, tandis qu’une autre vérifie que le service est actif. Ensemble, elles décrivent l’état final que l’hôte doit atteindre.

Ajoutez une deuxième tâche à votre liste dans site.yml.

---
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

    - name: Start nginx
      service:
        name: nginx
        state: started

Comprendre le code :

  • service: : ce module gère les services système, comme systemctl.
  • state: started : vérifie que le service est en cours d’exécution. S’il est arrêté, Ansible le démarre.

Important : le - de la deuxième tâche doit être exactement aligné sur celui de la première tâche.

Enregistrez le fichier, puis quittez nano (Ctrl+X, puis Y, puis Entrée).

Exécuter le playbook

Voici le moment de lancer votre automatisation !

Utilisez la commande ansible-playbook. Vous devez lui indiquer quel playbook exécuter (site.yml) et quel inventaire utiliser (hosts.ini).

Exécutez la commande suivante :

ansible-playbook site.yml -i hosts.ini

Observez la sortie. Vous verrez :

  1. Gathering Facts : Ansible commence par vérifier les informations du système.
  2. Install nginx : l’état changed s’affiche en jaune, car Ansible a dû installer le paquet.
  3. Start nginx : l’état changed s’affiche en jaune si Ansible a dû démarrer le service.

Si vous exécutez exactement la même commande une deuxième fois, la sortie s’affichera en vert et indiquera ok. Cela signifie que tout se trouve déjà dans l’état souhaité et qu’Ansible n’a rien modifié.

Vérifiez enfin manuellement que Nginx est en cours d’exécution :

systemctl status nginx

Vous devriez voir « Active: active (running) ».

Récapitulatif

Dans ce lab, vous avez rédigé votre premier playbook Ansible. Vous avez appris à :

  1. Utiliser la syntaxe YAML : structurer un playbook avec une indentation correcte.
  2. Définir des plays : indiquer hosts (où exécuter les tâches) et become (utiliser sudo).
  3. Définir des tâches : utiliser des modules comme apt (pour installer) et service (pour démarrer).
  4. Comprendre l’idempotence : exécuter le playbook plusieurs fois de manière sûre et stable.

Vous êtes passé de l’exécution manuelle de commandes à la définition de votre « infrastructure as code ».