Recherche de site Web

Comment réparer l'erreur Ansible « Connexion partagée à x.x.xx fermée »


Dans ce court article, nous expliquerons comment résoudre le : « module_stderr » : « Connexion partagée à x.x.x.x fermée.\r\n », « module_stdout » : « /bin/sh : /usr/ bin/python : aucun fichier ou répertoire de ce type\r\n », lors de l'exécution des commandes Ansible.

La capture d'écran suivante montre l'erreur du module Ansible. Nous avons rencontré cette erreur lors de l'exécution d'une commande Ansible pour exécuter des commandes sur deux serveurs CentOS 8 nouvellement déployés.

D'après les détails de l'erreur, la connexion a échoué car le ou les shells du système distant n'ont pas pu trouver l'interpréteur Python (/usr/bin/python), comme indiqué par la ligne : "module_stdout": "/bin/sh: /usr/bin/python : Aucun fichier ou répertoire de ce type\r\n".

Après avoir vérifié les hôtes distants, nous avons découvert que Python 2 n'est pas installé sur les systèmes.

Ils ont Python 3 installé par défaut et son binaire est /usr/bin/python3.

Selon la documentation d'Ansible, Ansible (2.5 et supérieur) fonctionne uniquement avec Python version 3 et supérieure. De plus, Ansible est censé détecter et utiliser automatiquement Python 3 sur de nombreuses plates-formes qui l'accompagnent.

Cependant, en cas d'échec, vous pouvez configurer explicitement un interpréteur Python 3 en définissant la variable d'inventaire ansible_python_interpreter au niveau du groupe ou de l'hôte sur l'emplacement d'un interpréteur Python 3, comme décrit ci-dessous.

Passer l'interpréteur Python à Ansible sur la ligne de commande

Pour corriger temporairement l'erreur ci-dessus, vous pouvez utiliser l'indicateur -e pour transmettre l'interpréteur Python 3 à Ansible comme indiqué.

ansible prod_servers  -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root

Définition de l'interpréteur Python pour Ansible dans l'inventaire

Pour corriger l'erreur de manière permanente, définissez la variable d'inventaire ansible_python_interpreter dans votre inventaire /etc/ansible/hosts. Vous pouvez l'ouvrir pour le modifier à l'aide de l'éditeur de texte v/im ou nano, comme indiqué.

sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts

Ajoutez la ligne suivante à chaque hôte ou hôtes d'un groupe :

ansible_python_interpreter=/usr/bin/python3

Ainsi, les définitions de vos hôtes peuvent ressembler à ceci :

[prod_servers]
192.168.10.1			ansible_python_interpreter=/usr/bin/python3
192.168.10.20			ansible_python_interpreter=/usr/bin/python3.6

Vous pouvez également définir le même interpréteur Python pour un groupe d'hôtes, comme indiqué.

[prod_servers]
192.168.10.1		
192.168.10.20		

[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3

Définition de l'interpréteur Python par défaut dans la configuration Ansible

Pour définir l'interpréteur Python par défaut, vous pouvez définir la variable d'inventaire ansible_python_interpreter dans le fichier de configuration principal d'Ansible /etc/ansible/ansible.cfg.

sudo vim /etc/ansible/ansible.cfg

Ajoutez la ligne suivante sous la section [defaults].

ansible_python_interpreter=/usr/bin/python3

Enregistrez le fichier et fermez-le.

Essayez maintenant d'exécuter à nouveau la commande Ansible :

ansible prod_servers -a "systemctl status firewalld" -u root

Pour plus d'informations sur ce sujet, consultez la prise en charge de Python 3 dans la documentation officielle d'Ansible.