Table of Contents
Cómo reparar el error de Ansible “Conexión compartida a x.x.xx cerrada”
En este breve artículo, explicaremos cómo resolver: “ module_stderr. : “Conexión compartida a xxxx cerrada. \ r \ n”, “module_stdout”: “/bin/sh:/usr/bin/python: No existe tal archivo o directorio \ r \ n ”, mientras se ejecutan los comandos de Ansible.
La siguiente captura de pantalla muestra el error del módulo Ansible. Encontramos este error al ejecutar un comando de Ansible para ejecutar comandos en dos servidores CentOS 8. recién implementados.
Error del módulo Ansible
De los detalles del error, la conexión falló porque el (los) shell (s) en el sistema remoto no pudieron encontrar el intérprete Python. (/usr/bin/python. como lo indica la línea: “ module_stdout”: “/bin/sh:/usr/bin/python: No existe tal archivo o directorio \ r \ n. .
Después de comprobar los hosts remotos, descubrimos que los sistemas no no tengo Python 2. instalado.
Verificar Python Binary
Tienen Python 3. instalado por defecto y su binario es /usr/bin/python3.
Verificar Python3 Binary freestar.config.enabled_slots. push
Según la documentación de Ansible, Ansible. ( 2.5. y superior) funciona con la versión de Python 3 y superior únicamente. Además, se supone que Ansible detecta y usa automáticamente Python 3 en muchas plataformas que lo incluyen.
Sin embargo, si no lo hace, puede configurar explícitamente un intérprete de Python 3 configurando ansible_python_interpreter. variable de inventario a nivel de grupo o de host a la ubicación de un intérprete de Python 3 como se describe a continuación.
Pasando el intérprete de Python a Ansible en la línea de comandos
Para corregir el error anterior temporalmente, puede usar la bandera-e para pasar el intérprete de Python 3 a Ansible como se muestra.
$ ansible prod_servers-e ‘ansible_python_interpreter =/usr/bin/python3’-a “systemctl status firewalld”-u root
Configurar el intérprete de Python a través de la línea de comandos
Configurar el intérprete de Python para Ansible en el inventario
Para corregir el error de forma permanente, configure la variable de inventario ansible_python_interpreter. en su inventario /etc/ansible/hosts. Puede abrirlo para editarlo usando el editor de texto v/im o nano como se muestra.
$ sudo vim/etc/ansible/hosts O # vim/etc/ansible/hosts
Agregue la siguiente línea a cada host o hosts en un grupo:
ansible_python_interpreter =/usr/bin/python3
Entonces, las definiciones de sus hosts pueden verse así:
[prod_servers] 192.168.10.1 ansible_python_interpreter =/usr/bin/python3 192.168.10.20 ansible_python_interpreter =/usr/bin/python3.6
Establecer el intérprete de Python para Ansible
Alternativamente, configure el mismo intérprete de Python para un grupo de hosts como se muestra.
[prod_servers] 192.168.10.1 192.168.10.20 [prod_servers: vars] ansible_python_interpreter =/usr/bin/python3
Establecer el intérprete de Python para todos los hosts en un grupo
Configuración del intérprete de Python predeterminado en la configuración de Ansible
Para configurar el intérprete de Python predeterminado, puede establecer la variable de inventario ansible_python_interpreter. en el archivo de configuración principal de Ansible /etc/ansible/ansible.cfg.
$ sudo vim/etc/ansible/ansible.cfg
Agregue la siguiente línea debajo de la sección [defaults].
ansible_python_interpreter =/usr/bin/python3
Establecer Python Intérprete en configuración Ansible
Guarde el archivo y ciérrelo.
Ahora intente ejecutar el comando Ansible una vez más:
$ ansible prod_servers-a “systemctl status firewalld”-u root
Verificar el comando Ansible
Para obtener más información sobre este tema, consulte la compatibilidad con Python 3 en la documentación oficial de Ansible.