Come risolvere l'errore Ansible "Connessione condivisa a x.x.xx chiusa".
In questo breve articolo spiegheremo come risolvere il: “module_stderr“: “Connessione condivisa a x.x.x.x chiusa.\r\n”, “module_stdout”: “/bin/sh: /usr/ bin/python: nessun file o directory\r\n”, durante l'esecuzione dei comandi Ansible.
La schermata seguente mostra l'errore del modulo Ansible. Abbiamo riscontrato questo errore durante l'esecuzione di un comando Ansible per eseguire comandi su due server CentOS 8 appena distribuiti.
Dai dettagli dell'errore, la connessione non è riuscita perché le shell nel sistema remoto non sono riuscite a trovare l'interprete Python (/usr/bin/python) come indicato da la riga: “module_stdout”: “/bin/sh: /usr/bin/python: No such file or directory\r\n”.
Dopo aver controllato gli host remoti, abbiamo scoperto che sui sistemi non è installato Python 2.
Hanno Python 3 installato per impostazione predefinita e il suo binario è /usr/bin/python3.
Secondo la documentazione di Ansible, Ansible (2.5 e successive) funziona solo con Python versione 3 e successive. Inoltre, Ansible dovrebbe rilevare e utilizzare automaticamente Python 3 su molte piattaforme fornite con esso.
Tuttavia, se fallisce, puoi configurare esplicitamente un interprete Python 3 impostando la variabile di inventario ansible_python_interpreter a livello di gruppo o host sulla posizione di un interprete Python 3 come descritto di seguito.
Passaggio dell'interprete Python ad Ansible dalla riga di comando
Per correggere temporaneamente l'errore precedente, puoi utilizzare il flag -e
per passare l'interprete Python 3 ad Ansible come mostrato.
ansible prod_servers -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root
Impostazione dell'interprete Python per Ansible nell'inventario
Per correggere l'errore in modo permanente, imposta la variabile di inventario ansible_python_interpreter nel tuo inventario /etc/ansible/hosts. Puoi aprirlo per la modifica utilizzando l'editor di testo v/im o nano come mostrato.
sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts
Aggiungi la seguente riga a ciascuno host o host in un gruppo:
ansible_python_interpreter=/usr/bin/python3
Quindi, le definizioni dei tuoi host possono assomigliare a queste:
[prod_servers]
192.168.10.1 ansible_python_interpreter=/usr/bin/python3
192.168.10.20 ansible_python_interpreter=/usr/bin/python3.6
In alternativa, imposta lo stesso interprete Python per un gruppo di host come mostrato.
[prod_servers]
192.168.10.1
192.168.10.20
[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3
Impostazione dell'interprete Python predefinito nella configurazione Ansible
Per impostare l'interprete Python predefinito, puoi impostare la variabile di inventario ansible_python_interpreter nel file di configurazione principale di Ansible /etc/ansible/ansible.cfg.
sudo vim /etc/ansible/ansible.cfg
Aggiungi la seguente riga nella sezione [defaults]
.
ansible_python_interpreter=/usr/bin/python3
Salva il file e chiudilo.
Ora prova a eseguire ancora una volta il comando Ansible:
ansible prod_servers -a "systemctl status firewalld" -u root
Per ulteriori informazioni su questo argomento, vedere il supporto di Python 3 nella documentazione ufficiale di Ansible.