Com solucionar l'error Ansible Connexió compartida a xx.xx tancada.


En aquest breu article, explicarem com resoldre: module_stderr: Connexió compartida amb x.x.x.x tancada.\r\n, module_stdout: /bin/sh: /usr/bin/python: no hi ha aquest fitxer o directori\r\n”, mentre executa les ordres Ansible.

La captura de pantalla següent mostra l'error del mòdul Ansible. Hem trobat aquest error mentre executava una ordre Ansible per executar ordres en dos servidors CentOS 8 recentment desplegats.

A partir dels detalls de l'error, la connexió ha fallat perquè l'intèrpret d'ordres del sistema remot no ha pogut trobar l'intèrpret de Python (/usr/bin/python) tal com indica la línia: “module_stdout”: “/bin/sh:/usr/bin/python: no hi ha cap fitxer o directori\r\n“.

Després de comprovar els amfitrions remots, vam descobrir que els sistemes no tenen Python 2 instal·lat.

Tenen Python 3 instal·lat per defecte i el seu binari és /usr/bin/python3.

Segons la documentació d'Ansible, Ansible (2.5 i superior) només funciona amb Python versió 3 i superior. A més, se suposa que Ansible detectarà i utilitzarà automàticament Python 3 a moltes plataformes que s'envien amb ell.

Tanmateix, si no ho aconsegueix, podeu configurar explícitament un intèrpret de Python 3 configurant la variable d'inventari ansible_python_interpreter a nivell de grup o host a la ubicació d'un intèrpret de Python 3 tal com es descriu a continuació.

Passant l'intèrpret de Python a Ansible a la línia d'ordres

Per corregir temporalment l'error anterior, podeu utilitzar el senyalador -e per passar l'intèrpret de Python 3 a Ansible tal com es mostra.

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

Configuració de l'intèrpret Python per a Ansible a l'inventari

Per corregir l'error de manera permanent, configureu la variable d'inventari ansible_python_interpreter al vostre inventari /etc/ansible/hosts. Podeu obrir-lo per editar-lo amb l'editor de text v/im o nano tal com es mostra.

$ sudo vim /etc/ansible/hosts
OR
# vim /etc/ansible/hosts

Afegiu la línia següent a cada amfitrió o amfitrions d'un grup:

ansible_python_interpreter=/usr/bin/python3

Per tant, les definicions dels vostres amfitrions poden semblar així:

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

Alternativament, configureu el mateix intèrpret de Python per a un grup d'amfitrions tal com es mostra.

[prod_servers]
192.168.10.1		
192.168.10.20		

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

Configuració de l'intèrpret Python predeterminat a la configuració d'Ansible

Per establir l'intèrpret de Python predeterminat, podeu establir la variable d'inventari ansible_python_interpreter al fitxer de configuració principal d'Ansible /etc/ansible/ansible.cfg.

$ sudo vim /etc/ansible/ansible.cfg

Afegiu la línia següent a la secció [defaults].

ansible_python_interpreter=/usr/bin/python3

Deseu el fitxer i tanqueu-lo.

Ara proveu d'executar l'ordre Ansible una vegada més:

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

Per obtenir més informació sobre aquest tema, vegeu el suport de Python 3 a la documentació oficial d'Ansible.