Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Dépannage

Introduction

Ce chapitre va évoquer les outils de dépannage qui permettent de résoudre les problèmes de connexion avec les hôtes gérés, mais aussi les problèmes rencontrés concernant les playbooks.

Outils de dépannage

Plusieurs moyens existent pour diagnostiquer un problème :

  • Consulter le système de journalisation.

  • Analyser la syntaxe YAML.

  • Réaliser un débogage des tâches.

1. Système de journalisation

Ansible Engine intègre un système de journalisation qui, par défaut, n’est pas activé. Pour effectuer sa configuration, il existe deux possibilités :

  • Ajouter dans la section [default] du fichier de configuration de Ansible le paramètre log_path.

  • Définir la variable d’environnement ANSIBLE_LOG_PATH.

Exemple

# Nom : ansible.cfg 
[defaults] 
inventory = ./inventories/staging.ini 
remote_user = ansible 
ask_pass = false 
log_path = /var/log/ansible.log 
 
[privilege_escalation] 
become = yes 
become_method = sudo 
become_user = root 
become_ask_pass = false 

Les permissions du fichier /var/log/ansible.log sont 0640. L’utilisateur et le groupe propriétaires doivent être le compte utilisateur qui exécute Ansible sur l’hôte géré :

[ansible@server1 ~]$ touch /var/log/ansible.log 
[ansible@server1 ~]$ chmod 640 /var/log/ansible.log 
[ansible@server1 ~]$ chown ansible:ansible /var/log/ansible.log 
[ansible@server1 ~]$ 

Notez que le nom du compte ci-dessus peut être quelconque. Ici, il se nomme ansible. Son groupe primaire porte le même nom. Il est membre du groupe wheel :

[ansible@server1 ~]$ id -Gn ansible 
ansible wheel 
[ansible@server1 ~]$ 

La sortie du journal se présente ainsi :

[ansible@server1 ce11]$ cat /var/log/ansible.log 
 
**** sortie tronquée **** 
 
2020-04-2 13:03:25,876 p=1628 u=ansible n=ansible | ERROR! 
Syntax Error while loading YAML. 
 mapping values are not allowed in this context 
 
The error appears to be in '/workspace/ce11-trbsht/pb_dbg.yml': 
line 7, column 9, but may be elsewhere in the file depending 
on the exact syntax problem. 
 
The offending line appears to be: 
 
 -name : creer un dossier 
   file: 
       ^ here 
 
[ansible@server1 ce11]$ 

Il est conseillé de configurer logrotate pour la gestion du fichier journal de Ansible.

2. Syntaxe YAML

Les fichiers d’inventaire peuvent être écrits dans...

Problèmes de connexion avec les hôtes gérés

Pour diagnostiquer les problèmes de connexion, il est possible de vérifier :

  • la configuration réseau ;

  • l’identification et l’authentification avec l’hôte géré ;

  • en utilisant des commandes ad hoc ;

1. Configuration réseau

Commencez à vérifier que les machines sont bien branchées sur le réseau. Contrôlez le bon fonctionnement du câblage, de la carte réseau et de son driver. 

Vérifiez ensuite la configuration TCP/IP, à savoir l’adresse IP et la résolution des noms d’hôtes.

Le service sshd est-il activé et démarré ? Inspectez la configuration dans le fichier /etc/ssh/sshd_config. Le port TCP 22, est-il ouvert dans le pare-feu ?

Avez-vous généré la clé ssh avec la commande ssh-keygen sur le nœud de contrôle ? A-t-elle été copiée sur les hôtes gérés avec ssh-copy-id ? Manuellement, la connexion ssh s’effectue-t-elle sans demander le mot de passe ?

Consultez la section Tester la communication dans le chapitre Présentation de Ansible.

Vérifiez que les noms d’hôtes et les adresses IP sont correctement ajoutés dans le fichier d’inventaire.

Consultez le chapitre Déploiement.

2. Identification et authentification

Vous pouvez créer un playbook test.yml :

--- 
- name: Tester le fonctionnement d'un playbook ...

Résolution de problèmes concernant les playbooks

Pour résoudre les problèmes relatifs aux playbooks, vous pouvez :

  • analyser la sortie à l’écran ;

  • utiliser le mode check.

1. Analyser la sortie à l’écran

Le résultat de l’exécution d’un playbook s’affiche à l’écran. Analyser cette sortie peut être un bon début pour diagnostiquer.

Un résultat affiche un en-tête PLAY mentionnant le nom du « play » à exécuter :

PLAY [ce09-lab3 - Installer et configurer Apache] ************** 

Ensuite, sont présents un ou plusieurs en-têtes TASK. Un en-tête représente une tâche précise du playbook qui est exécutée sur tous les hôtes gérés définis par le mot-clé hosts dans le playbook. :

TASK [Installer les paquets de Apache] ************************ 
ok: [server2] 
 
TASK [Ouvrir les ports HTTP et HTTPS] ************************* 
changed: [server2] => (item=http) 
changed: [server2] => (item=https) 

Le nom de l’hôte géré sur lequel la tâche est exécutée apparaît sous l’en-tête ainsi que l’état de la tâche : ok, fatal, changed ou skipping.

Au bas de la sortie de chaque play, la section PLAY RECAP affiche le nombre de tâches exécutées pour chaque hôte géré :

PLAY RECAP ***************************************************** 
server2  : ok=9  changed=7  unreachable=0  failed=0  skipped=1  
rescued=0  ignored=0 

L’affichage du résultat d’un playbook peut être plus ou moins détaillé afin d’effectuer le débogage des tâches. L’option -v de la commande ansible-playbook fournit quatre niveaux de détail :

Option

Description

-v

Les résultats sont affichés.

-vv

Les résultats et les données entrées sont affichés.

-vvv

Inclut des informations sur les connexions aux hôtes gérés.

-vvvv

Inclut des informations supplémentaires, telles que les scripts exécutés sur chaque hôte distant, ainsi que l’utilisateur exécutant...

Quelques bonnes pratiques

Ce chapitre a énuméré des outils qui permettent d’identifier et de résoudre les problèmes rencontrés pendant la conception d’un playbook.

Il va maintenant aborder quelques bonnes pratiques qui peuvent faciliter la résolution des problèmes.

1. Définir le nom des plays et des tâches

a. Nom d’un play

Donnez au play un nom qui décrit son objectif. Cela permet de décrire ce que fait chaque play et pourquoi il est nécessaire :

--- 
- name: Mise en œuvre d'un serveur Apache 

Elle est affichée au moment de l’exécution :

[root@server1 ce11]# ansible-playbook playbook.yml 
 
PLAY [Mise en œuvre d'un serveur Apache] ********************** 
 
 
**** sortie tronquée **** 

b. Nom d’une tâche

Nommez une tâche dans un « play » en prenant en compte les mêmes considérations que celles évoquées précédemment pour un « play » :

  tasks: 
  - name: Démarrer et activer le service HTTPD 

Elle est aussi affichée au moment de l’exécution :

[root@server1 ce11]# ansible-playbook playbook.yml 
 
PLAY [Mise en œuvre d'un serveur Apache] ********************** 
 
 
**** sortie tronquée...