Cómo solucionar Conexión compartida a X.X.xx cerrado ”error ansible

Cómo solucionar Conexión compartida a X.X.xx cerrado ”error ansible

En este breve artículo, explicaremos cómo resolver el: "módulo_stderr":" Conexión compartida a X.X.X.x cerrado.\ r \ n "," MODULE_STDOUT ":"/bin/sh:/usr/bin/python: no hay dicho archivo o directorio \ r \ n ", mientras se ejecuta comandos Ansible.

La siguiente captura de pantalla muestra el error del módulo Ansible. Encontramos este error al ejecutar un comando ansible para ejecutar comandos en dos recién implementados Centos 8 servidor.

Error del módulo ansible

A partir de los detalles del error, la conexión falló porque los shell (s) en el sistema remoto no podían encontrar el Pitón intérprete (/usr/bin/python) como lo indica la línea: "MODULE_STDOUT ":“/bin/sh:/usr/bin/python: no hay dicho archivo o directorio \ r \ n".

Después de revisar los hosts remotos, descubrimos que los sistemas no tienen Python 2 instalado.

Consulte el binario de Python

Ellos tienen Python 3 instalado de forma predeterminada y su binario es /usr/bin/python3.

Consulte Python3 binary

Según la documentación ansible, Ansible (2.5 y arriba) funciona solo con Python versión 3 y superior. Además, se supone que Ansible detectará y usa automáticamente Python 3 en muchas plataformas que se envían con él.

Sin embargo, si no lo hace, entonces puede configurar explícitamente un intérprete de Python 3 configurando el ansible_python_interpreter Variable de inventario a nivel de grupo o host a la ubicación de un intérprete 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 el -mi bandera 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 
Establezca 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 el ansible_python_interpreter Variable de inventario en su inventario /etc/ansible/hosts. Puede abrirlo para editar 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 anfitriones 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 intérprete de Python para Ansible

Alternativamente, establezca 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 Python Interpreter-, para todos los anfitriones en un grupo

Configuración de intérprete Python predeterminado en la configuración Ansible

Para establecer el intérprete Python predeterminado, puede establecer el ansible_python_interpreter Variable de inventario 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 del [Valores predeterminados] sección.

ansible_python_interpreter =/usr/bin/python3 
Establezca el intérprete de Python en la configuración Ansible

Guarde el archivo y cierre.

Ahora intente ejecutar el comando Ansible una vez más:

$ ansible prod_servers -a "systemCtl status firewalld" -u root 
Verifique el comando Ansible

Para obtener más información sobre este tema, consulte el soporte de Python 3 en la documentación oficial Ansible.