Jak opravit chybu „Sdílené připojení k x.x.xx uzavřeno“ Ansible Error
V tomto krátkém článku si vysvětlíme, jak vyřešit: „module_stderr“: „Sdílené připojení k x.x.x.x uzavřeno.\r\n“, „module_stdout“: „/bin/sh: /usr/ bin/python: Žádný takový soubor nebo adresář\r\n“, při spouštění příkazů Ansible.
Následující snímek obrazovky ukazuje chybu modulu Ansible. Na tuto chybu jsme narazili při spouštění příkazu Ansible k provádění příkazů na dvou nově nasazených serverech CentOS 8.
Podle podrobností o chybě se připojení nezdařilo, protože shell(y) ve vzdáleném systému nemohly najít interpret Python (/usr/bin/python), jak je uvedeno řádek: „module_stdout“: „/bin/sh: /usr/bin/python: Žádný takový soubor nebo adresář\r\n“.
Po kontrole vzdálených hostitelů jsme zjistili, že systémy nemají nainstalovaný Python 2.
Ve výchozím nastavení mají nainstalovaný Python 3 a jeho binární soubor je /usr/bin/python3.
Podle dokumentace Ansible funguje Ansible (2.5 a vyšší) pouze s Pythonem verze 3 a vyšší. Ansible má také automaticky detekovat a používat Python 3 na mnoha platformách, které jsou s ním dodávány.
Pokud se to však nepodaří, můžete interpret Python 3 explicitně nakonfigurovat nastavením proměnné inventáře ansible_python_interpreter na úrovni skupiny nebo hostitele na umístění interpretu Pythonu 3, jak je popsáno níže.
Předání Python Interpreteru Ansible na příkazovém řádku
Chcete-li výše uvedenou chybu dočasně opravit, můžete použít příznak -e
k předání interpretu Pythonu 3 do Ansible, jak je znázorněno.
ansible prod_servers -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root
Nastavení Python Interpreter pro Ansible v inventáři
Chcete-li chybu trvale opravit, nastavte proměnnou inventáře ansible_python_interpreter v inventáři /etc/ansible/hosts. Můžete jej otevřít pro úpravy pomocí textového editoru v/im nebo nano, jak je znázorněno.
sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts
Ke každému hostiteli nebo hostitelům ve skupině připojte následující řádek:
ansible_python_interpreter=/usr/bin/python3
Takže definice vašich hostitelů mohou vypadat takto:
[prod_servers]
192.168.10.1 ansible_python_interpreter=/usr/bin/python3
192.168.10.20 ansible_python_interpreter=/usr/bin/python3.6
Případně nastavte stejný interpret Pythonu pro skupinu hostitelů, jak je znázorněno.
[prod_servers]
192.168.10.1
192.168.10.20
[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3
Nastavení výchozího interpretu Pythonu v konfiguraci Ansible
Chcete-li nastavit výchozí interpret Pythonu, můžete nastavit proměnnou inventáře ansible_python_interpreter v hlavním konfiguračním souboru Ansible /etc/ansible/ansible.cfg.
sudo vim /etc/ansible/ansible.cfg
Přidejte následující řádek pod sekci [výchozí]
.
ansible_python_interpreter=/usr/bin/python3
Uložte soubor a zavřete jej.
Nyní zkuste spustit příkaz Ansible ještě jednou:
ansible prod_servers -a "systemctl status firewalld" -u root
Další informace o tomto tématu najdete v tématu podpora Pythonu 3 v oficiální dokumentaci Ansible.