Cara Memperbaiki Kemungkinan Kesalahan "Koneksi bersama ke xx.xx ditutup".


Dalam artikel singkat ini, kami akan menjelaskan cara menyelesaikan: “module_stderr“: “Koneksi bersama ke x.x.x.x ditutup.\r\n”, “module_stdout”: “/bin/sh: /usr/ bin/python: Tidak ada file atau direktori seperti itu\r\n”, saat menjalankan perintah yang Mungkin.

Tangkapan layar berikut menunjukkan kesalahan modul yang mungkin terjadi. Kami mengalami kesalahan ini saat menjalankan perintah Ansible untuk menjalankan perintah pada dua server CentOS 8 yang baru dikerahkan.

Dari rincian kesalahan, koneksi gagal karena shell di sistem jarak jauh tidak dapat menemukan penerjemah Python (/usr/bin/python) seperti yang ditunjukkan oleh baris: “module_stdout”: “/bin/sh: /usr/bin/python: Tidak ada file atau direktori seperti itu\r\n“.

Setelah memeriksa host jarak jauh, kami menemukan bahwa sistemnya belum menginstal Python 2.

Mereka telah menginstal Python 3 secara default dan binernya adalah /usr/bin/python3.

Menurut dokumentasi Ansible, Ansible (2.5 dan lebih tinggi) hanya berfungsi dengan Python versi 3 dan lebih tinggi. Selain itu, Ansible seharusnya secara otomatis mendeteksi dan menggunakan Python 3 di banyak platform yang menyertainya.

Namun, jika gagal, maka Anda dapat secara eksplisit mengonfigurasi juru bahasa Python 3 dengan menyetel variabel inventaris ansible_python_interpreter di tingkat grup atau host ke lokasi juru bahasa Python 3 seperti dijelaskan di bawah.

Meneruskan Interpreter Python ke Ansible di Command-line

Untuk memperbaiki kesalahan di atas untuk sementara, Anda dapat menggunakan flag -e untuk meneruskan interpreter Python 3 ke Ansible seperti yang ditunjukkan.

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

Mengatur Interpreter Python untuk Ansible di Inventaris

Untuk memperbaiki kesalahan secara permanen, setel variabel inventaris ansible_python_interpreter di inventaris Anda /etc/ansible/hosts. Anda dapat membukanya untuk diedit menggunakan editor teks v/im atau nano seperti yang ditunjukkan.

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

Tambahkan baris berikut ke setiap host atau host dalam grup:

ansible_python_interpreter=/usr/bin/python3

Jadi, definisi host Anda bisa terlihat seperti ini:

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

Alternatifnya, atur interpreter Python yang sama untuk sekelompok host seperti yang ditunjukkan.

[prod_servers]
192.168.10.1		
192.168.10.20		

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

Mengatur Penerjemah Python Default dalam Konfigurasi yang Mungkin

Untuk menyetel juru bahasa Python default, Anda dapat menyetel variabel inventaris ansible_python_interpreter di file konfigurasi utama Ansible /etc/ansible/ansible.cfg.

sudo vim /etc/ansible/ansible.cfg

Tambahkan baris berikut di bawah bagian [defaults].

ansible_python_interpreter=/usr/bin/python3

Simpan file dan tutup.

Sekarang coba jalankan perintah Ansible sekali lagi:

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

Untuk informasi lebih lanjut tentang topik ini, lihat dukungan Python 3 di dokumentasi resmi Ansible.