Dans ce court article, nous expliquerons comment résoudre le problème: « module_stderr« : » Connexion partagée à xxxx 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’un Commande Ansible pour exécuter des commandes sur deux nouvellement déployés CentOS 8 les serveurs.
À partir des détails de l’erreur, la connexion a échoué car le ou les shell (s) du système distant n’ont pas pu trouver le Python interprète (/ 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 les systèmes n’ont pas Python 2 installée.
Ils ont Python 3 installé par défaut et son binaire est / usr / bin / python3.
Selon la documentation Ansible, Ansible (2,5 et au-dessus) fonctionne uniquement avec Python version 3 et supérieure. En outre, 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 le ansible_python_interpreter variable d’inventaire au niveau du groupe ou de l’hôte à 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 le -e
flag pour passer 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 façon permanente, définissez le ansible_python_interpreter variable d’inventaire 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 le ansible_python_interpreter variable d’inventaire dans le fichier de configuration principal d’Ansible /etc/ansible/ansible.cfg.
$ sudo vim /etc/ansible/ansible.cfg
Ajoutez la ligne suivante sous le [defaults]
section.
ansible_python_interpreter=/usr/bin/python3
Enregistrez le fichier et fermez-le.
Maintenant, essayez d’exécuter à nouveau la commande Ansible:
$ ansible prod_servers -a "systemctl status firewalld" -u root
Pour plus d’informations sur ce sujet, consultez Prise en charge de Python 3 dans la documentation officielle d’Ansible.
Si vous appréciez ce que nous faisons ici sur TecMint, vous devriez considérer:
TecMint est le site communautaire à la croissance la plus rapide et le plus fiable pour tout type d’articles, de guides et de livres Linux sur le Web. Des millions de personnes visitent TecMint! pour rechercher ou parcourir les milliers d’articles publiés disponibles GRATUITEMENT à tous.
Si vous aimez ce que vous lisez, pensez à nous acheter un café (ou 2) en guise de remerciement.
Nous sommes reconnaissants de votre soutien sans fin.
.