Playbooks Ansible
La partition de l'automatisation.
Notions théoriques
Les Playbooks
Les Playbooks sont écrits en YAML, un langage de sérialisation de données humainement lisible,
qui permet de décrire les tâches d'automatisation de manière très structurée.
Un Playbook est une liste ordonnée de tâches que vous voulez exécuter sur un ou plusieurs hôtes dans votre inventaire. C'est comme une partition musicale qui indique à chaque musicien (serveur) ce qu'il doit jouer et à quel moment.
Un Playbook Ansible typique contient :
- Un nom
namepour le Playbook. - Un ou plusieurs hôtes cibles
hosts. - Une liste de tâches à exécuter
tasks.

Nous verrons; par la suite, qu'un Playbook Ansible peut également contenir des variables.
Exemple pratique
Pour cet exemple, nous allons écrire un Playbook simple pour mettre à jour les paquets de nos conteneurs Debian et installer le paquet vim.
- Sur votre serveur Ansible, créez un fichier
mise_a_jour.ymldans le répertoire/root/ansible.
nano /root/ansible/mise_a_jour.yml
- Écrivez le Playbook suivant dans le fichier :
---
- name: Mise a jour et installation de vim sur tous les conteneurs
hosts: conteneurs
# become: yes # Pour utiliser sudo
tasks:
- name: Mise a jour de tous les paquets
apt:
update_cache: yes
upgrade: dist
- name: Installation de vim
apt:
name: vim
state: present
Explication détaillée des lignes de cet exemple
La ligne --- indique le début d'un document YAML.
-
'
name' donne un nom descriptif à la 'play'.Cela aide à comprendre ce que la 'play' est censée faire lorsque vous exécutez le Playbook.
-
'
hosts' spécifie sur quels hôtes ou groupes d'hôtes le Playbook doit être exécuté.Ici, il cible un groupe nommé 'conteneurs'.
-
'
become: yes' indique à Ansible d'exécuter les tâches avec les privilèges d'administration (souvent en tant queroot).Cela équivaut à utiliser sudo sur les systèmes Unix/Linux.
-
'
tasks' est une liste de tâches que Ansible exécutera séquentiellement.Chaque tâche a un nom qui décrit ce que la tâche est censée faire.
-
'
apt' est un module Ansible utilisé pour gérer les paquets sur les systèmes basés sur Debian/Ubuntu. -
'
update_cache: yes' dit à Ansible de rafraîchir le cache des paquets locaux avant de faire une modification.C'est similaire à '
apt update'. -
'
upgrade: dist' indique à Ansible de mettre à niveau tous les paquets vers les dernières versions disponibles.Cela correspond à '
apt dist-upgradeouapt full-upgrade'. -
'
state: present' s'assure que le paquet spécifié ('vim' dans cet exemple) est installé.Si '
vim' n'est pas installé, Ansible l'installera.
-
Enregistrez le fichier et quittez l'éditeur de texte.
-
Exécutez le Playbook avec la commande suivante :
ansible-playbook -i /root/ansible/mon_inventaire.ini /root/ansible/mise_a_jour.yml
Si tout est configuré correctement, Ansible exécutera les tâches sur tous les hôtes spécifiés dans le groupe conteneurs de votre inventaire :

Test de mémorisation/compréhension
TP - Installer Apache sur vos 3 conteneurs
Votre mission consiste à déployer un serveur Web Apache sur vos conteneurs.
Pour cela, vous allez créer un Playbook Ansible qui accomplira les tâches suivantes :
- Installer Apache.
- Démarrer le service Apache.
- S'assurer que le service Apache est activé au démarrage.
- Ouvrez un terminal sur votre serveur de contrôle Ansible.
- Créez un fichier nommé
deploy_apache.ymldans le répertoire/root/ansible. - Ouvrez ce fichier avec un éditeur de texte de votre choix, par exemple
nanoouvim. - Rédigez le Playbook nécessaire pour installer Apache, démarrer le service et l'activer au démarrage:
---
- name: Deploiement d'Apache sur les conteneurs
hosts: conteneurs
# become: yes # Pour utiliser sudo
tasks:
- name: Installation d'Apache
apt:
name: apache2
state: present
- name: Demarrage du service Apache
service:
name: apache2
state: started
enabled: yes
'become: yes'
Dans ce TP, pour se connecter à nos machines, nous utilisons l'utilisateur root.
- En production, nous utiliserions un autre compte utilisateur (pour davantage de sécurité).
- Et pour permettre à cet utilisateur de devenir
rootpendant l'exécution de la commande (avecsudo), nous devrions ajouter la ligne suivante dans le Playbook : 'become: yes'
- Exécutez le Playbook sur vos conteneurs cibles.
- Vérifiez que le service Apache est installé et fonctionne correctement
en accédant à l'adresse IP de chacun de vos conteneurs en utilisant la commande
curldepuis votre serveur Ansible :
curl adresse_ip_de_votre_conteneur
Par exemple :
curl 172.17.0.3
Voici la commande pour installer curl :
apt install curl

Pour vérifier que le service Apache est installé et fonctionne correctement (en accédant à l'adresse IP de chacun de vos conteneurs) vous pourrier aussi utiliser un navigateur Web.
C'est ce que nous verrons ensuite.
Une solution
Vous devez être connecté pour voir le contenu.