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.