Cómo reparar el error de Ansible “Conexión compartida a x.x.xx cerrada”

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 de módulo Ansible  Error del módulo Ansible 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  Verificar Python Binary Verificar Python Binary

Tienen Python 3. instalado por defecto y su binario es /usr/bin/python3.

Verificar Python3 Binary  Verificar Python3 Binary 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  Establecer el intérprete de Python a través de Línea de comando  Establecer intérprete de Python a través de Command-línea 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 intérprete de Python para Ansible  Establecer el intérprete de Python para Ansible 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 intérprete de Python para todos los hosts en un grupo  Establecer el intérprete de Python para todos los hosts de un grupo 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 el intérprete de Python en la configuración de Ansible  Establecer el intérprete de Python en la configuración de Ansible 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 comando Ansible  Marque Ansible Comando 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.