Πώς να διορθώσετε το σφάλμα "Κοινόχρηστη σύνδεση στο x.x.xx κλειστό".


Σε αυτό το σύντομο άρθρο, θα εξηγήσουμε πώς να λύσουμε τα εξής: "module_stderr": "Κοινόχρηστη σύνδεση με x.x.x.x κλειστή.\r\n", "module_stdout": "/bin/sh: /usr/ bin/python: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος\r\n", ενώ εκτελούνται οι εντολές Ansible.

Το ακόλουθο στιγμιότυπο οθόνης δείχνει το σφάλμα μονάδας Ansible. Αντιμετωπίσαμε αυτό το σφάλμα κατά την εκτέλεση μιας εντολής Ansible για την εκτέλεση εντολών σε δύο διακομιστές CentOS 8 που αναπτύχθηκαν πρόσφατα.

Από τις λεπτομέρειες του σφάλματος, η σύνδεση απέτυχε επειδή το κέλυφος στο απομακρυσμένο σύστημα δεν μπορούσαν να βρουν τον διερμηνέα 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_interpreter σε επίπεδο ομάδας ή κεντρικού υπολογιστή στη θέση ενός διερμηνέα Python 3 όπως περιγράφεται παρακάτω.

Μεταβίβαση διερμηνέα Python στο Ansible στη γραμμή εντολών

Για να διορθώσετε προσωρινά το παραπάνω σφάλμα, μπορείτε να χρησιμοποιήσετε τη σημαία -e για να μεταβιβάσετε τον διερμηνέα Python 3 στο Ansible όπως φαίνεται.

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

Ρύθμιση διερμηνέα Python για το Ansible στο Inventory

Για να διορθώσετε μόνιμα το σφάλμα, ορίστε τη μεταβλητή αποθέματος ansible_python_interpreter στο απόθεμά σας /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_interpreter στο κύριο αρχείο διαμόρφωσης του Ansible /etc/ansible/ansible.cfg.

sudo vim /etc/ansible/ansible.cfg

Προσθέστε την ακόλουθη γραμμή κάτω από την ενότητα [προεπιλογές].

ansible_python_interpreter=/usr/bin/python3

Αποθηκεύστε το αρχείο και κλείστε το.

Τώρα προσπαθήστε να εκτελέσετε την εντολή Ansible άλλη μια φορά:

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

Για περισσότερες πληροφορίες σχετικά με αυτό το θέμα, ανατρέξτε στην υποστήριξη Python 3 στην επίσημη τεκμηρίωση του Ansible.