web-dev-qa-db-fra.com

Comment détecter pourquoi le playbook Ansible se bloque pendant l'exécution

Certaines des tâches que j'ai écrites commencent et ne se terminent pas. Ansible ne fournit aucune erreur ni aucun journal qui expliquerait cela, même avec l'option -vvvv. Playbook se bloque et les heures qui passent ne changent rien.

Lorsque j'essaie d'exécuter mes tâches manuellement (en entrant des commandes via SSH), tout va bien.

Exemple de tâche qui se bloque:

- name: apt upgrade
  Shell: apt-get upgrade

Existe-t-il un moyen de voir stdout et stderr? J'ai essayé:

- name: apt upgrade
  Shell: apt-get upgrade
  register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"

mais rien n'a changé.

J'ai les autorisations requises et je passe le bon mot de passe Sudo - les autres tâches qui nécessitent Sudo s'exécutent correctement.

40
dev9

J'avais les mêmes problèmes avec un playbook.

Il a fonctionné parfaitement jusqu'à un certain point puis s'est arrêté, j'ai donc ajouté des paramètres async et poll pour éviter ce comportement.

- name: update packages full into each server
  apt: upgrade=full
  ignore_errors: True
  async: 60
  poll: 60

et ça a fonctionné comme un charme! Je ne sais vraiment pas ce qui s'est passé mais il semble maintenant qu'Ansible prenne en compte ce qui se passe et ne gèle plus!

J'espère que ça aide

8
Rubendob

La cause la plus probable de votre problème serait la connexion SSH. Lorsqu'une tâche nécessite un long délai d'exécution SSH timeouts. J'ai rencontré un tel problème une fois, afin de surmonter le délai d'expiration SSH, créez un ansible.cfg dans le répertoire actuel à partir duquel vous exécutez Ansible, ajoutez ce qui suit:

[ssh_connection]

ssh_args = -o ServerAliveInterval=n

n est le ServerAliveInterval (secondes) que nous utilisons lors de la connexion au serveur via SSH. Réglez-le entre 1-255. Cela entraînera le client ssh à envoyer des paquets nuls au serveur toutes les n secondes pour éviter le délai de connexion.

7
Abhijit

J'ai eu les mêmes problèmes et après un peu de tripotage, j'ai trouvé que le problème était en train de rassembler des faits. Voici quelques conseils pour mieux résoudre tout problème similaire.

Désactivez la collecte des faits dans votre manuel:

---
- hosts: myservers
  gather_facts: no
..

Relancez le playbook. Si cela fonctionne, cela signifie que le coupable n'est pas dans le SSH lui-même, mais plutôt dans le script rassemblant les faits. Nous pouvons déboguer ce problème assez facilement.

  1. SSH vers le boîtier distant
  2. Recherchez le fichier setup quelque part dans le dossier .ansible.
  3. Exécutez-le avec ./setup Ou python -B setup

S'il se bloque, alors nous savons que le problème est là pour sûr. Pour trouver exactement ce qui le bloque, vous pouvez simplement ouvrir le fichier avec un éditeur et ajouter des instructions print principalement dans la méthode populate() de Facts. Relancez le script et voyez combien de temps il dure.

Pour moi, le problème semblait essayer de résoudre le nom d'hôte à la ligne self.facts['fqdn'] = socket.getfqdn() et avec un peu de recherche, il s'est avéré être un problème avec résolution du nom d'hôte distant .

7
Pithikos

Un travail totalement différent pour moi. Je l'avais depuis une Debian Jessie (Linux PwC-Deb64 3.16.0-4-AMD64 #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) x86_64 GNU/Linux) vers une autre image Debian que j'essayais de construire dans AWS.

Après que plusieurs des suggestions ici n'aient pas fonctionné pour moi, j'ai eu des soupçons concernant la connexion SSH "partagée". Je suis allé à mon ansible.cfg et a trouvé le ssh_args lignes et définir ControlMaster=no. Cela peut maintenant fonctionner lentement car j'ai perdu le boost de performances SSH que cela est censé donner, mais il semble qu'il y ait une interaction entre cela et apt-get à l'origine du problème.

Votre ansible.cfg peut se trouver dans le répertoire à partir duquel vous exécutez ansible, ou dans /etc/ansible. Dans ce dernier cas, vous pouvez en prendre une copie dans un répertoire local avant de commencer à le modifier!

3
dsz

La suppression du mot de passe de ma clé SSH l'a corrigé pour moi, par exemple:

ssh-keygen -p
1
Dorian