Zoeken op website

Hoe u de Ansible-fout 'Gedeelde verbinding met x.x.xx gesloten' kunt oplossen


In dit korte artikel leggen we uit hoe je het probleem kunt oplossen: “module_stderr“: “Gedeelde verbinding met x.x.x.x gesloten.\r\n”, “module_stdout”: “/bin/sh: /usr/ bin/python: No such file or directory\r\n”, terwijl Ansible-opdrachten worden uitgevoerd.

De volgende schermafbeelding toont de Ansible-modulefout. We zijn deze fout tegengekomen tijdens het uitvoeren van een Ansible-opdracht om opdrachten uit te voeren op twee nieuw geïmplementeerde CentOS 8-servers.

Uit de foutdetails blijkt dat de verbinding mislukte omdat de shell(s) in het externe systeem de Python-interpreter (/usr/bin/python) niet konden vinden, zoals aangegeven door de regel: “module_stdout”: “/bin/sh: /usr/bin/python: Bestand of map bestaat niet\r\n“.

Nadat we de externe hosts hadden gecontroleerd, ontdekten we dat op de systemen Python 2 niet is geïnstalleerd.

Ze hebben Python 3 standaard geïnstalleerd en het binaire bestand is /usr/bin/python3.

Volgens de Ansible-documentatie werkt Ansible (2.5 en hoger) alleen met Python versie 3 en hoger. Bovendien wordt Ansible verondersteld Python 3 automatisch te detecteren en te gebruiken op veel platforms die ermee worden meegeleverd.

Als dit echter niet lukt, kunt u expliciet een Python 3-interpreter configureren door de inventarisvariabele ansible_python_interpreter op groeps- of hostniveau in te stellen op de locatie van een Python 3-interpreter, zoals hieronder beschreven.

Python-interpreter doorgeven aan Ansible op de opdrachtregel

Om de bovenstaande fout tijdelijk op te lossen, kunt u de vlag -e gebruiken om de Python 3-interpreter door te geven aan Ansible, zoals weergegeven.

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

Python-interpreter voor Ansible instellen in de inventaris

Om de fout permanent op te lossen, stelt u de inventarisvariabele ansible_python_interpreter in uw inventaris /etc/ansible/hosts in. U kunt het openen voor bewerking met de v/im- of nano-teksteditor, zoals weergegeven.

sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts

Voeg de volgende regel toe aan elke host of hosts in een groep:

ansible_python_interpreter=/usr/bin/python3

De definities van uw hosts kunnen er dus als volgt uitzien:

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

U kunt ook dezelfde Python-interpreter instellen voor een groep hosts, zoals weergegeven.

[prod_servers]
192.168.10.1		
192.168.10.20		

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

Standaard Python-interpreter instellen in Ansible-configuratie

Om de standaard Python-interpreter in te stellen, kunt u de inventarisvariabele ansible_python_interpreter instellen in het hoofdconfiguratiebestand /etc/ansible/ansible.cfg van Ansible.

sudo vim /etc/ansible/ansible.cfg

Voeg de volgende regel toe onder de sectie [defaults].

ansible_python_interpreter=/usr/bin/python3

Sla het bestand op en sluit het.

Probeer nu het Ansible-commando nogmaals uit te voeren:

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

Zie Python 3-ondersteuning in de officiële Ansible-documentatie voor meer informatie over dit onderwerp.