97 votes

Ansible bloqué sur la collecte des faits

J'ai quelques problèmes étranges avec ma boîte ansible (vagrant).

Tout a fonctionné hier et mon playbook fonctionnait bien.

Aujourd'hui, ansible s'accroche à la "collecte de faits" ?

Voici la sortie verbeuse :

<5.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: deploy
<5.xxx.xxx.xxx> REMOTE_MODULE setup
<5.xxx.xxx.xxx> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-
o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-s
sh-%h-%p-%r', '-o', 'Port=2221', '-o', 'KbdInteractiveAuthentication=no', '-o',
'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o
', 'PasswordAuthentication=no', '-o', 'User=deploy', '-o', 'ConnectTimeout=10',
'5.xxx.xxx.xxx', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1411372677
.18-251130781588968 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1411372677.18-2
51130781588968 && echo $HOME/.ansible/tmp/ansible-tmp-1411372677.18-251130781588
968'"]

5voto

Yuri Points 198

J'ai résolu la cause de ce problème en suivant les conseils de Pourquoi mon ansible-playbook se bloque dans "Gathering facts" ? blog post.

On peut le simplifier :

  1. Définir DEFAULT_KEEP_REMOTE_FILES=yes pour conserver les commandes et activer -vvvv

  2. Exécutez le livre de jeu à nouveau.

  3. Lorsque la copie de lecture coincée la dernière commande Shell a été imprimée (la partie après /bin/sh -c )

  4. Connectez-vous au serveur via ssh .

  5. Utilice strace pour rejouer la dernière étape de la pièce. La commande de pas est copiée de la commande -vvv sortie. Par exemple : strace -f /bin/sh -c "echo BECOME-SUCCESS-ltxvshvezrnmumzdprccoiekhjheuwxt; /usr/bin/python /home/user/.ansible/tmp/ansible-tmp-1527099315.31-224479822965785/setup.py"

  6. Vérifiez sur quel appel l'étape "straced" s'est bloquée et corrigez-la :)

Dans mon cas, c'était un lecteur réseau inaccessible...

3voto

lafka Points 141

Dmytro est sur quelque chose !

Ansible utilise le FQDN de l'hôte. Si votre hôte n'est pas résolvable par DNS et que vous n'avez pas de mappage dans le fichier /etc/hosts ansible attendra le délai d'expiration du DNS.

En ajoutant ::1 <fqdn> dans le fichier hôte des machines que vous connectez, Ansible obtiendra le FQDN immédiatement sans passer par le DNS.

Notez que l'hôte doit rechercher les hôtes à partir de /etc/hosts c'est la valeur par défaut pour la plupart des systèmes linux, sinon tous, mais si vous éditez /etc/nsswitch.conf aussi, cela pourrait être un problème.

2voto

rleon Points 31

J'ai eu le même problème. Je n'ai obtenu aucune information utile en exécutant ansible en mode verbeux.

Le serveur a été réapprovisionné avant d'exécuter le playbook.

La suppression du serveur de la liste des hôtes connus a permis de résoudre le problème en utilisant la commande ci-dessous.

$ ssh-keygen -f "~/.ssh/known_hosts" -R <hostname>
$ ssh-keygen -f "~/.ssh/known_hosts" -R <ip_address>

Note : Vous devez supprimer à la fois le nom d'hôte et l'adresse IP.

1voto

Keith Hill Points 21

Il est très peu probable que vous rencontriez le scénario qui a causé ce problème pour moi, mais juste au cas où... Mon playbook s'exécutait bien une fois, mais lors des exécutions suivantes, il restait bloqué à Gathering facts, puis timeout. J'ai fini par comprendre que l'une de mes tâches consistait à configurer l'option /opt/rh/devtoolset-8/enable à exécuter via un lien /etc/profile.d. Eh bien, eh bien, eh bien tout d'un coup sudo fait désormais référence à /opt/rh/devtoolset-8/root/usr/bin/sudo et il ne reconnaît pas les paramètres qu'Ansible essaie d'utiliser.

0voto

hora Points 1151

Je ne sais pas si vous utilisez un sudo playbook - mais c'était le cas pour moi, et il s'accrochait au mot de passe sudo.

D'après la documentation, vous pouvez le tuer, puis utiliser -K également.

Bonne chance.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X