วิธีแก้ไข "การเชื่อมต่อที่ใช้ร่วมกันกับ x.x.xx ปิด" ข้อผิดพลาด Ansible
ในบทความสั้น ๆ นี้ เราจะอธิบายวิธีแก้ปัญหา: “module_stderr“: “การเชื่อมต่อที่ใช้ร่วมกันกับ x.x.x.x ปิดอยู่\r\n”, “module_stdout”: “/bin/sh: /usr/ bin/python: ไม่มีไฟล์หรือไดเร็กทอรี\r\n” ขณะรันคำสั่ง Ansible
ภาพหน้าจอต่อไปนี้แสดงข้อผิดพลาดของโมดูล Ansible เราพบข้อผิดพลาดนี้ขณะเรียกใช้คำสั่ง Ansible เพื่อดำเนินการคำสั่งบนเซิร์ฟเวอร์ CentOS 8 ที่เพิ่งปรับใช้ใหม่ 2 เซิร์ฟเวอร์
จากรายละเอียดข้อผิดพลาด การเชื่อมต่อล้มเหลวเนื่องจากเชลล์ในระบบระยะไกลไม่พบล่าม Python (/usr/bin/python) ตามที่ระบุโดย บรรทัด: “module_stdout”: “/bin/sh: /usr/bin/python: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว\r\n“
หลังจากตรวจสอบโฮสต์ระยะไกล เราพบว่าระบบไม่ได้ติดตั้ง Python 2
มีการติดตั้ง Python 3 เป็นค่าเริ่มต้น และไบนารีของมันคือ /usr/bin/python3
ตามเอกสาร Ansible Ansible (2.5 ขึ้นไป) ใช้งานได้กับ Python เวอร์ชัน 3 ขึ้นไปเท่านั้น นอกจากนี้ Ansible ควรตรวจจับและใช้ Python 3 โดยอัตโนมัติบนหลายแพลตฟอร์มที่มาพร้อมกับมัน
อย่างไรก็ตาม หากไม่สำเร็จ คุณสามารถกำหนดค่าล่าม Python 3 ได้อย่างชัดเจนโดยการตั้งค่าตัวแปรพื้นที่โฆษณา ansible_python_reapter ที่ระดับกลุ่มหรือโฮสต์เป็นตำแหน่งของล่าม Python 3 ตามที่อธิบายไว้ด้านล่าง
การส่ง Python Interpreter ไปยัง Ansible บนบรรทัดคำสั่ง
หากต้องการแก้ไขข้อผิดพลาดข้างต้นชั่วคราว คุณสามารถใช้แฟล็ก -e
เพื่อส่งล่าม Python 3 ไปยัง Ansible ดังที่แสดง
ansible prod_servers -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root
การตั้งค่า Python Interpreter สำหรับ Ansible ใน Inventory
หากต้องการแก้ไขข้อผิดพลาดอย่างถาวร ให้ตั้งค่าตัวแปรพื้นที่โฆษณา ansible_python_reapter ในพื้นที่โฆษณาของคุณ /etc/ansible/hosts คุณสามารถเปิดเพื่อแก้ไขโดยใช้โปรแกรมแก้ไขข้อความ v/im หรือ nano ดังที่แสดง
sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts
ผนวกบรรทัดต่อไปนี้กับแต่ละโฮสต์หรือโฮสต์ในกลุ่ม:
ansible_python_interpreter=/usr/bin/python3
ดังนั้น คำจำกัดความของโฮสต์ของคุณอาจมีลักษณะดังนี้:
[prod_servers]
192.168.10.1 ansible_python_interpreter=/usr/bin/python3
192.168.10.20 ansible_python_interpreter=/usr/bin/python3.6
หรือตั้งค่าล่าม Python เดียวกันสำหรับกลุ่มโฮสต์ตามที่แสดง
[prod_servers]
192.168.10.1
192.168.10.20
[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3
การตั้งค่าล่าม Python เริ่มต้นในการกำหนดค่า Ansible
หากต้องการตั้งค่าล่าม Python เริ่มต้น คุณสามารถตั้งค่าตัวแปรพื้นที่โฆษณา ansible_python_reapter ในไฟล์การกำหนดค่าหลักของ Ansible /etc/ansible/ansible.cfg
sudo vim /etc/ansible/ansible.cfg
เพิ่มบรรทัดต่อไปนี้ใต้ส่วน [defaults]
ansible_python_interpreter=/usr/bin/python3
บันทึกไฟล์และปิด
ตอนนี้ให้ลองรันคำสั่ง Ansible อีกครั้ง:
ansible prod_servers -a "systemctl status firewalld" -u root
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ โปรดดูการสนับสนุน Python 3 ในเอกสาร Ansible อย่างเป็นทางการ