Wyszukiwanie w witrynie

Jak naprawić błąd Ansible „Połączenie współdzielone z x.x.xx zamknięte”.


W tym krótkim artykule wyjaśnimy, jak rozwiązać problem: „module_stderr”: „Współdzielone połączenie z x.x.x.x zamknięte.\r\n”, „module_stdout”: „/bin/sh: /usr/ bin/python: Brak takiego pliku lub katalogu\r\n” podczas uruchamiania poleceń Ansible.

Poniższy zrzut ekranu pokazuje błąd modułu Ansible. Napotkaliśmy ten błąd podczas uruchamiania polecenia Ansible w celu wykonania poleceń na dwóch nowo wdrożonych serwerach CentOS 8.

Ze szczegółów błędu wynika, że połączenie nie powiodło się, ponieważ powłoki w systemie zdalnym nie mogły znaleźć interpretera Python (/usr/bin/python), jak wskazuje wiersz: „module_stdout”: „/bin/sh: /usr/bin/python: Nie ma takiego pliku ani katalogu\r\n”.

Po sprawdzeniu zdalnych hostów odkryliśmy, że systemy nie mają zainstalowanego Pythona 2.

Domyślnie mają zainstalowany Python 3, a jego plik binarny to /usr/bin/python3.

Zgodnie z dokumentacją Ansible, Ansible (2.5 i nowsze) działa tylko z Pythonem w wersji 3 i nowszych. Ponadto Ansible powinien automatycznie wykrywać i używać Pythona 3 na wielu platformach, które są z nim dostarczane.

Jeśli jednak to się nie powiedzie, możesz jawnie skonfigurować interpreter Pythona 3, ustawiając zmienną inwentarzową ansible_python_interpreter na poziomie grupy lub hosta na lokalizację interpretera Pythona 3, jak opisano poniżej.

Przekazywanie interpretera Pythona do Ansible w wierszu poleceń

Aby tymczasowo naprawić powyższy błąd, możesz użyć flagi -e, aby przekazać interpreter Pythona 3 do Ansible, jak pokazano.

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

Ustawianie interpretera Pythona dla Ansible w ekwipunku

Aby trwale naprawić błąd, ustaw zmienną inwentarzową ansible_python_interpreter w zasobach /etc/ansible/hosts. Można go otworzyć do edycji za pomocą edytora tekstu v/im lub nano, jak pokazano.

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

Dołącz następujący wiersz do każdego hosta lub hostów w grupie:

ansible_python_interpreter=/usr/bin/python3

Zatem definicje hostów mogą wyglądać następująco:

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

Alternatywnie ustaw ten sam interpreter Pythona dla grupy hostów, jak pokazano.

[prod_servers]
192.168.10.1		
192.168.10.20		

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

Ustawianie domyślnego interpretera języka Python w konfiguracji Ansible

Aby ustawić domyślny interpreter Pythona, możesz ustawić zmienną inwentarzową ansible_python_interpreter w głównym pliku konfiguracyjnym Ansible /etc/ansible/ansible.cfg.

sudo vim /etc/ansible/ansible.cfg

Dodaj następujący wiersz w sekcji [defaults].

ansible_python_interpreter=/usr/bin/python3

Zapisz plik i zamknij go.

Teraz spróbuj jeszcze raz uruchomić polecenie Ansible:

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

Więcej informacji na ten temat można znaleźć w sekcji Obsługa języka Python 3 w oficjalnej dokumentacji Ansible.