Pratique 3 - Questions de résolution de problèmes (troubleshooting)
Table des matières
- Playbook 1 - Installer Apache
- Playbook 2 - Gestion des utilisateurs
- Playbook 3 - Configuration SSH
- Playbook 4 - Gestion des services
- Playbook 5 - Gestion des fichiers
- Playbook 6 - Variables et conditions
- Playbook 7 - Gestion des permissions
- Playbook 8 - Gestion des paquets
- Playbook 9 - Configuration SSH avancée
- Playbook 10 - Multiples erreurs de syntaxe, de variable et de gestion de service
- Playbook 11 - Mauvaise indentation et mauvaise gestion de service
Correction des Playbooks
- Dans cette section, nous allons examiner les erreurs courantes dans les playbooks Ansible et leurs corrections.
- Les erreurs sont marquées par ❌ et les corrections sont indiquées par ✅.
- Chaque correction est accompagnée d'une explication détaillée pour comprendre pourquoi le changement était nécessaire. Les playbooks corrigés ont été testés et validés pour assurer leur bon fonctionnement.
Playbook 1 - Installer Apache
- Erreur d'indentation dans la tâche "Installer Apache". Le module apt doit être aligné avec name.
---
- name: Installer un package sur Ubuntu
hosts: all
become: yes
tasks:
- name: Installer Apache
❌ apt:
✅ apt:
name: apache2
state: present
✅ Corrections apportées :
-
Correction de l'indentation incorrecte de
apt
- ❌
apt:
mal positionné sous- name: Installer Apache
- ✅
apt:
correctement indenté avec 4 espaces supplémentaires
- ❌
-
Correction de l'indentation des paramètres
name:
etstate:
- ✅
name:
etstate:
correctement placés sousapt:
- ✅
Version corrigée à tester
---
- name: Installer un package sur Ubuntu
hosts: all
become: yes
tasks:
- name: Installer Apache
apt:
name: apache2
state: present
🔙 Retour à la Table des Matières
Playbook 2 - Mauvais module utilisé
- Erreur de syntaxe dans la tâche "Configurer Nginx". La syntaxe de la variable "listen_port" est incorrecte.
2️⃣ Playbook facile – Mauvais module utilisé
---
- name: Mettre à jour le système
hosts: all
become: yes
tasks:
- name: Mise à jour du système
❌ yum:
✅ apt:
update_cache: yes
✅ Corrections apportées :
-
Correction du mauvais module
yum
- ❌
yum:
→ Spécifique à CentOS/AlmaLinux/RHEL - ✅
apt:
→ Spécifique aux distributions basées sur Debian/Ubuntu
- ❌
-
Correction de l'indentation
- ❌
update_cache:
mal aligné sousapt:
- ✅ Ajout de 4 espaces supplémentaires pour un alignement parfait
- ❌
Version corrigée à tester
---
- name: Mettre à jour le système
hosts: all
become: yes
tasks:
- name: Mise à jour du système
apt:
update_cache: yes
🔙 Retour à la Table des Matières
Playbook 3 - Variable incorrecte
- Erreur de syntaxe dans la tâche "Configurer SSH". La syntaxe de la variable "ssh_port" est incorrecte.
3️⃣ Playbook facile – Variable incorrecte
---
- name: Créer un utilisateur
hosts: all
become: yes
vars:
user: "deploy"
tasks:
- name: Ajouter l'utilisateur
user:
❌ name: "{{ utilisateur }}"
✅ name: "{{ user }}"
shell: /bin/bash
✅ Corrections apportées :
-
Correction de la variable incorrecte
- ❌
name: "{{ utilisateur }}"
→ Mauvaise variable non définie - ✅
name: "{{ user }}"
→ Utilisation de la bonne variableuser
définie dansvars
- ❌
-
Correction de l'indentation
- ❌
name:
etshell:
mal alignés soususer:
- ✅ Ajout de 4 espaces supplémentaires pour un alignement parfait
- ❌
Version corrigée à tester
---
- name: Créer un utilisateur
hosts: all
become: yes
vars:
user: "deploy"
tasks:
- name: Ajouter l'utilisateur
user:
name: "{{ user }}"
shell: /bin/bash
🔙 Retour à la Table des Matières
Playbook 4 - Mauvais nom de package selon l'OS
- Erreur de syntaxe dans la tâche "Installer plusieurs packages". La syntaxe de la variable "packages" est incorrecte.
4️⃣ Playbook intermédiaire – Mauvais nom de package selon l'OS
---
- name: Installer Docker
hosts: all
become: yes
tasks:
- name: Installer Docker sur Ubuntu et CentOS
❌ yum:
✅ package:
name: docker
state: present
✅ Corrections apportées :
-
Correction du mauvais module
yum
- ❌
yum:
→ spécifique aux distributions RHEL/CentOS - ✅
package:
→ fonctionne pour toutes les distributions (Ubuntu, CentOS, Debian, AlmaLinux...)
- ❌
-
Correction de l'indentation
- ❌
name:
etstate:
étaient mal alignés après le changement de module - ✅ Ajout de 4 espaces supplémentaires sous
package:
pour un alignement parfait
- ❌
Version corrigée à tester
---
- name: Installer Docker
hosts: all
become: yes
tasks:
- name: Installer Docker sur Ubuntu et CentOS
package:
name: docker
state: present
🔙 Retour à la Table des Matières
Playbook 5 - Mauvaise indentation et notify mal placé
- Erreur de syntaxe dans la tâche "Installer plusieurs packages". La syntaxe de la variable "packages" est incorrecte.
5️⃣ Playbook intermédiaire – Mauvaise indentation et notify mal placé
---
- name: Installer Nginx et ouvrir le port 80
hosts: all
become: yes
tasks:
- name: Installer Nginx
apt:
name: nginx
state: latest
❌ notify:
✅ notify:
- Restart Nginx
- name: Ouvrir le port 80
firewalld:
service: http
permanent: true
state: enabled
❌ notify:
✅ notify:
- Reload Firewalld
handlers:
- name: Restart Nginx
❌ service:
✅ service:
name: nginx
state: restarted
- name: Reload Firewalld
❌ command:
✅ command: firewall-cmd --reload
✅ Corrections précises :
-
Indentation corrigée de
notify
- ❌
notify:
mal positionné - ✅
notify:
correctement aligné avec 2 espaces de décalage soustasks
- ❌
-
Correction de l'indentation dans
handlers
- ❌
service:
etcommand:
mal placés - ✅
service:
etcommand:
correctement alignés avec 4 espaces supplémentaires pourname:
etstate:
- ❌
Version corrigée à tester
- name: Installer Nginx et ouvrir le port 80
hosts: all
become: yes
tasks:
- name: Installer Nginx
apt:
name: nginx
state: latest
notify:
- Restart Nginx
- name: Ouvrir le port 80
firewalld:
service: http
permanent: true
state: enabled
notify:
- Reload Firewalld
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
- name: Reload Firewalld
command: firewall-cmd --reload
🔙 Retour à la Table des Matières
Playbook 6 - Erreur sur le service SSH
- Erreur de syntaxe dans la tâche "Configurer et sécuriser un serveur". La syntaxe de la variable "ssh_port" est incorrecte.
6️⃣ Playbook intermédiaire – Erreur sur le service SSH
---
- name: Configurer SSH
hosts: all
become: yes
tasks:
- name: Modifier la configuration SSH
lineinfile:
path: /etc/ssh/sshd_config
line: "PermitRootLogin no"
state: present
notify: Restart SSH
handlers:
- name: Restart SSH
❌ service:
✅ service:
name: sshd
state: restarted
✅ Corrections et améliorations apportées :
-
Mauvais service pour le redémarrage de SSH
- ❌
name: ssh
→ Ce nom de service n'existe pas sur la plupart des systèmes - ✅
name: sshd
→ Le bon service pour SSH
- ❌
-
Utilisation correcte des handlers
- ✅ Ajout d'un
notify: Restart SSH
pour redémarrer le service uniquement si la configuration change - ✅ Déplacement du handler sous
handlers:
pour une meilleure gestion
- ✅ Ajout d'un
Version corrigée à tester
---
- name: Configurer SSH
hosts: all
become: yes
tasks:
- name: Modifier la configuration SSH
lineinfile:
path: /etc/ssh/sshd_config
line: "PermitRootLogin no"
state: present
notify: Restart SSH
handlers:
- name: Restart SSH
service:
name: sshd
state: restarted
🔙 Retour à la Table des Matières
Playbook 7 - Mauvais module pour AlmaLinux
- Erreur de syntaxe dans la tâche "Installer plusieurs packages". La syntaxe de la variable "packages" est incorrecte.
---
- name: Installation de packages et services
hosts: all
become: yes
tasks:
- name: Mettre à jour le cache des paquets
yum:
update_cache: yes
- name: Installer Apache
❌ apt:
✅ package:
name: httpd
state: latest
✅ Corrections apportées :
-
Indentation incorrecte pour la tâche
Installer Apache
- ❌
apt:
était mal aligné - ✅
package:
est maintenant bien indenté sous- name: Installer Apache
- ❌
-
Utilisation correcte du module
package
au lieu deapt
- ✅
package:
fonctionne sur AlmaLinux/RHEL et Debian/Ubuntu
- ✅
Version corrigée à tester
---
- name: Installation de packages et services
hosts: all
become: yes
tasks:
- name: Mettre à jour le cache des paquets
yum:
update_cache: yes
- name: Installer Apache
package:
name: httpd
state: latest
🔙 Retour à la Table des Matières
Playbook 8 - Erreur de conditionnel et mauvaise boucle
- Erreur de syntaxe dans la tâche "Installer plusieurs packages". La syntaxe de la variable "packages" est incorrecte.
8️⃣ Playbook avancé – Erreur de conditionnel et mauvaise boucle
---
- name: Installer plusieurs packages
hosts: all
become: yes
tasks:
- name: Installer les packages
package:
name: "{{ item }}"
state: present
❌ when: ansible_os_family == "Debian"
✅ when: ansible_os_family == "Debian"
loop:
- apache2
- nginx
- mysql-server
✅ Correction apportée :
- Mauvaise indentation de
when
- ❌
when:
était mal positionné souspackage
- ✅
when:
doit être aligné avecloop
pour s'appliquer à toute la tâche
- ❌
Version corrigée à tester
---
- name: Installer plusieurs packages
hosts: all
become: yes
tasks:
- name: Installer les packages
package:
name: "{{ item }}"
state: present
when: ansible_os_family == "Debian"
loop:
- apache2
- nginx
- mysql-server
🔙 Retour à la Table des Matières
Playbook 9 - Mauvaise gestion de clé SSH
- Erreur de syntaxe dans la tâche "Configurer et sécuriser un serveur". La syntaxe de la variable "ssh_port" est incorrecte.
9️⃣ Playbook difficile – Mauvaise gestion de clé SSH
---
- name: Configurer SSH pour un nouvel utilisateur
hosts: all
become: yes
vars:
new_user: "deploy"
tasks:
- name: Ajouter l'utilisateur
user:
name: "{{ new_user }}"
shell: "/bin/bash"
groups: sudo
create_home: yes
state: present
- name: Créer le répertoire .ssh pour l'utilisateur
file:
path: "/home/{{ new_user }}/.ssh"
state: directory
owner: "{{ new_user }}"
group: "{{ new_user }}"
mode: "0700"
- name: Ajouter la clé SSH
copy:
src: "~/.ssh/id_rsa.pub"
dest: "/home/{{ new_user }}/.ssh/authorized_keys"
❌ owner: "{{ newuser }}"
✅ owner: "{{ new_user }}"
group: "{{ new_user }}"
mode: "0600"
✅ Corrections et améliorations apportées :
-
Correction de la variable
owner
❌owner: "{{ newuser }}"
→ Erreur de variable
✅owner: "{{ new_user }}"
→ Utilisation correcte de la variable -
Ajout du paramètre
create_home: yes
pour l’utilisateur
✅ Permet de s'assurer que/home/{{ new_user }}
est bien créé -
Ajout d’une tâche pour créer
.ssh/
avec les permissions correctes
✅ Évite les erreurs si le répertoire.ssh
n’existe pas encore -
Ajout du paramètre
group: "{{ new_user }}"
dans les tâchesfile
etcopy
✅ Assure que les permissions sont bien définies pour l’utilisateur
Version corrigée à tester
---
- name: Configurer SSH pour un nouvel utilisateur
hosts: all
become: yes
vars:
new_user: "deploy"
tasks:
- name: Ajouter l'utilisateur
user:
name: "{{ new_user }}"
shell: "/bin/bash"
groups: sudo
create_home: yes
state: present
- name: Créer le répertoire .ssh pour l'utilisateur
file:
path: "/home/{{ new_user }}/.ssh"
state: directory
owner: "{{ new_user }}"
group: "{{ new_user }}"
mode: "0700"
- name: Ajouter la clé SSH
copy:
src: "~/.ssh/id_rsa.pub"
dest: "/home/{{ new_user }}/.ssh/authorized_keys"
owner: "{{ new_user }}"
group: "{{ new_user }}"
mode: "0600"
🔙 Retour à la Table des Matières
Playbook 10 - Multiples erreurs de syntaxe, de variable et de gestion de service
- Erreur de syntaxe dans la tâche "Configurer et sécuriser un serveur". La syntaxe de la variable "ssh_port" est incorrecte.
🔟 Playbook très difficile – Multiples erreurs de syntaxe, de variable et de gestion de service
---
- name: Configurer et sécuriser un serveur
hosts: all
become: yes
tasks:
- name: Installer des outils de base
apt:
update_cache: yes
❌ name:
✅ pkg:
- vim
- git
- curl
- wget
- unzip
- name: Ajouter un utilisateur
user:
❌ name: "{{ deploy_user }}"
✅ name: "deploy"
shell: /bin/bash
groups: sudo
state: present
- name: Désactiver le root SSH
lineinfile:
path: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
❌ line: "PermitRootLogin no"
✅ line: "PermitRootLogin no"
state: present
notify: Restart SSH
- name: Activer et démarrer le firewall
firewalld:
❌ service: ssh
✅ port: 22/tcp
permanent: true
state: enabled
notify: Reload firewall
handlers:
- name: Restart SSH
❌ service:
✅ systemd:
name: sshd
state: restarted
- name: Reload firewall
command: firewall-cmd --reload
✅ Corrections effectuées :
-
Correction du module
apt
❌name:
incorrect pour une liste de paquets
✅ Remplacement parpkg:
-
Correction de la variable
deploy_user
❌ Variable non définie → provoque une erreur
✅ Remplacement par"deploy"
(ajouter la variable si nécessaire) -
Correction de
lineinfile
pour SSH
❌ Pas deregexp:
→ Peut causer une duplication de la ligne
✅ Ajout deregexp: "^PermitRootLogin"
pour modification propre -
Correction de
firewalld
❌service: ssh
incorrect
✅ Remplacement parport: 22/tcp
pour ouvrir SSH correctement -
Correction du gestionnaire
Restart SSH
❌service:
incorrect (ancien format)
✅ Remplacement parsystemd:
pour compatibilité moderne -
Ajout d’un handler pour recharger le firewall
✅firewall-cmd --reload
pour appliquer les changements
Version corrigée à tester
---
- name: Configurer et sécuriser un serveur
hosts: all
become: yes
tasks:
- name: Installer des outils de base
apt:
update_cache: yes
pkg:
- vim
- git
- curl
- wget
- unzip
- name: Ajouter un utilisateur
user:
name: "{{ new_user }}"
shell: /bin/bash
groups: sudo
state: present
- name: Désactiver le root SSH
lineinfile:
path: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
state: present
notify: Restart SSH
- name: Activer et démarrer le firewall
firewalld:
port: 22/tcp
permanent: true
state: enabled
notify: Reload firewall
handlers:
- name: Restart SSH
systemd:
name: sshd
state: restarted
- name: Reload firewall
command: firewall-cmd --reload
🔙 Retour à la Table des Matières
Playbook 11 - Mauvaise indentation et mauvaise gestion de service
- Erreur de syntaxe dans la tâche "Configurer et sécuriser un serveur". La syntaxe de la variable "ssh_port" est incorrecte.
Correction du Playbook avec erreurs
Voici les 10 erreurs identifiées et leurs corrections :
-
Erreur d'indentation dans la tâche "Installer Apache"
- Problème : L'indentation du module apt est incorrecte
- Correction : Aligner correctement les paramètres du module
- name: Installer Apache
apt:
name: apache2
state: present -
Module incorrect "service_gp_update"
- Problème : Le module n'existe pas
- Correction : Utiliser le module "service"
- name: Démarrer Apache
service:
name: apache2
state: started -
Guillemet non fermé dans la commande shell
- Problème : La chaîne n'est pas terminée
- Correction : Fermer le guillemet
- name: Exécuter une commande shell
shell: echo "Déploiement terminé" -
Variable non définie "chemin_source"
- Problème : Variable utilisée sans être définie
- Correction : Définir la variable ou fournir un chemin direct
vars:
chemin_source: "/chemin/vers/fichier" -
Format incorrect pour le nom d'utilisateur
- Problème : Liste utilisée pour un seul nom
- Correction : Utiliser une chaîne simple
- name: Créer un utilisateur
user:
name: "toto"
state: present -
Utilisation incorrecte de la commande grep
- Problème : Utilisation non fiable de grep
- Correction : Utiliser le module ansible_facts
- name: Obtenir l'adresse IP
debug:
msg: "L'adresse IP est {{ ansible_default_ipv4.address }}" -
Affichage incorrect du résultat enregistré
- Problème : Variable stdout manquante
- Correction : Utiliser .stdout pour afficher le résultat
- debug:
msg: "L'adresse IP est {{ ip_result.stdout }}" -
Format incorrect de la boucle
- Problème : Syntaxe de liste incorrecte
- Correction : Utiliser le format correct
loop:
- nginx
- git
- unzip -
Indentation incorrecte dans le playbook
- Problème : Indentation non cohérente
- Correction : Maintenir une indentation cohérente de 2 espaces
-
Absence de gestionnaire d'erreurs
- Problème : Pas de gestion des erreurs
- Correction : Ajouter ignore_errors ou handlers selon les besoins
ignore_errors: yes