In questo breve articolo, spiegheremo come risolvere: “module_stderr“:” Connessione condivisa a xxxx chiusa. R n “,” module_stdout “:” / bin / sh: / usr / bin / python: nessun file o directory di questo tipo r n “, durante l’esecuzione dei comandi Ansible.

La seguente schermata mostra l’errore del modulo Ansible. Abbiamo riscontrato questo errore durante l’esecuzione di un comando Ansible per eseguire comandi su due appena distribuiti CentOS 8 server.

Errore modulo Ansible
Errore modulo Ansible

Dai dettagli dell’errore, la connessione non è riuscita perché le shell nel sistema remoto non sono riuscite a trovare il file Pitone interprete (/ usr / bin / python) come indicato dalla riga: “module_stdout “:” / bin / sh: / usr / bin / python: nessun file o directory di questo tipo r n“.

Dopo aver controllato gli host remoti, abbiamo scoperto che i sistemi non hanno Python 2 installato.

Controlla Python Binary
Controlla Python Binary

Loro hanno Python 3 installato di default e il suo binario è / usr / bin / python3.

Controlla il file binario di Python3
Controlla il file binario di Python3

 

Secondo la documentazione Ansible, Ansible (2.5 e versioni 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 non riesce, puoi configurare esplicitamente un interprete Python 3 impostando il ansible_python_interpreter variabile di inventario a livello di gruppo o host nella posizione di un interprete Python 3 come descritto di seguito.

Passaggio di Python Interpreter ad Ansible sulla riga di comando

Per correggere temporaneamente l’errore sopra riportato, puoi utilizzare il file -e flag 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
Imposta Python Interpreter tramite riga di comando
Imposta Python Interpreter tramite riga di comando

Impostazione dell’interprete Python per Ansible nell’inventario

Per correggere l’errore in modo permanente, impostare l’estensione ansible_python_interpreter variabile dello spazio pubblicitario 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 ogni host o host in un gruppo:

ansible_python_interpreter=/usr/bin/python3

Quindi, le definizioni dei tuoi host possono assomigliare a questa:

[prod_servers]
192.168.10.1			ansible_python_interpreter=/usr/bin/python3
192.168.10.20			ansible_python_interpreter=/usr/bin/python3.6
Imposta l'interprete Python per Ansible
Imposta l’interprete Python per Ansible

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
Imposta l'interprete Python per tutti gli host in un gruppo
Imposta l’interprete Python per tutti gli host in un gruppo

Impostazione dell’interprete Python predefinito nella configurazione Ansible

Per impostare l’interprete Python predefinito, puoi impostare il ansible_python_interpreter variabile di inventario nel file di configurazione principale di Ansible /etc/ansible/ansible.cfg.

$ sudo vim /etc/ansible/ansible.cfg

Aggiungi la seguente riga sotto il file [defaults] sezione.

ansible_python_interpreter=/usr/bin/python3
Imposta l'interprete Python nella configurazione Ansible
Imposta l’interprete Python nella configurazione Ansible

Salva il file e chiudilo.

Ora prova a eseguire nuovamente il comando Ansible:

$ ansible prod_servers -a "systemctl status firewalld" -u root
Seleziona Ansible Command
Seleziona Ansible Command

Per ulteriori informazioni su questo argomento, vedere il supporto di Python 3 nella documentazione ufficiale di Ansible.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *