Website-Suche

So beheben Sie den Ansible-Fehler „Freigegebene Verbindung zu x.x.xx geschlossen“.


In diesem kurzen Artikel erklären wir, wie man das Problem löst: „module_stderr“: „Gemeinsame Verbindung zu x.x.x.x geschlossen.\r\n“, „module_stdout“: „/bin/sh: /usr/ bin/python: Keine solche Datei oder kein solches Verzeichnis\r\n“, während Ansible-Befehle ausgeführt werden.

Der folgende Screenshot zeigt den Ansible-Modulfehler. Dieser Fehler ist beim Ausführen eines Ansible-Befehls zum Ausführen von Befehlen auf zwei neu bereitgestellten CentOS 8-Servern aufgetreten.

Den Fehlerdetails zufolge ist die Verbindung fehlgeschlagen, weil die Shell(s) im Remote-System den Python-Interpreter (/usr/bin/python) nicht finden konnten, wie durch angegeben die Zeile: „module_stdout“: „/bin/sh: /usr/bin/python: Keine solche Datei oder kein solches Verzeichnis\r\n“.

Nachdem wir die Remote-Hosts überprüft hatten, stellten wir fest, dass auf den Systemen kein Python 2 installiert war.

Sie haben standardmäßig Python 3 installiert und die Binärdatei ist /usr/bin/python3.

Laut der Ansible-Dokumentation funktioniert Ansible (2.5 und höher) nur mit Python Version 3 und höher. Außerdem soll Ansible Python 3 auf vielen Plattformen, die damit ausgeliefert werden, automatisch erkennen und verwenden.

Sollte dies jedoch fehlschlagen, können Sie einen Python-3-Interpreter explizit konfigurieren, indem Sie die Inventarvariable ansible_python_interpreter auf Gruppen- oder Hostebene auf den Speicherort eines Python-3-Interpreters setzen, wie unten beschrieben.

Übergabe des Python-Interpreters an Ansible in der Befehlszeile

Um den oben genannten Fehler vorübergehend zu beheben, können Sie das Flag -e verwenden, um den Python 3-Interpreter wie gezeigt an Ansible zu übergeben.

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

Festlegen des Python-Interpreters für Ansible im Inventar

Um den Fehler dauerhaft zu beheben, legen Sie die Inventarvariable ansible_python_interpreter in Ihrem Inventar /etc/ansible/hosts fest. Sie können es wie gezeigt mit dem V/IM- oder Nano-Texteditor zur Bearbeitung öffnen.

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

Hängen Sie die folgende Zeile an jeden Host oder jede Hosts in einer Gruppe an:

ansible_python_interpreter=/usr/bin/python3

Die Definitionen Ihrer Hosts können also wie folgt aussehen:

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

Alternativ können Sie für eine Gruppe von Hosts denselben Python-Interpreter wie gezeigt festlegen.

[prod_servers]
192.168.10.1		
192.168.10.20		

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

Festlegen des Standard-Python-Interpreters in der Ansible-Konfiguration

Um den Standard-Python-Interpreter festzulegen, können Sie die Inventarvariable ansible_python_interpreter in der Hauptkonfigurationsdatei von Ansible /etc/ansible/ansible.cfg festlegen.

sudo vim /etc/ansible/ansible.cfg

Fügen Sie die folgende Zeile unter dem Abschnitt [defaults] hinzu.

ansible_python_interpreter=/usr/bin/python3

Speichern Sie die Datei und schließen Sie sie.

Versuchen Sie nun noch einmal, den Ansible-Befehl auszuführen:

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

Weitere Informationen zu diesem Thema finden Sie unter Python 3-Unterstützung in der offiziellen Ansible-Dokumentation.