ansible -m ping -u ubuntu us-west-2a. أنسبل-إم بينغ-يو أوبونتو أوس-ويست-2 أ
35.166.197.222 | باءت بالفشل! => {
"تغيرت": خطأ ،
"فشل": صحيح ،
"module_stderr": "الاتصال المشترك بـ 35.166.197.222 مغلق. \ r \ n"،
"module_stdout": "/ bin / sh: 1: / usr / bin / python: غير موجود \ r \ n"،
"msg": "MODULE FAILURE"
}
الرجاء استخدام نموذج المشكلة بدلاً من حذفه - هذا ليس تقرير خطأ مفيد أو قابل للتنفيذ. أظن أنك تقوم بتشغيل Ubuntu 16+ أو أي شيء آخر بدون تثبيت python3 افتراضي ، لكن لا يمكننا معرفة ذلك بدون تقرير خطأ كامل.
لم يتم تثبيت Python على أحدث الصور في AWS ... تحتاج إلى إضافة هذا كمهمة مسبقة:
pre_tasks:
- name: Refresh apt cache
become: no
local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get update
- name: Install Python-apt to pull in Python
become: no
local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get install --no-install-recommends --assume-yes python-apt
لا بد لي من استخدام هذا في مهامي لجعل AMI تعمل بشكل جيد مع Ansible.
تم تثبيت Python3 بشكل افتراضي على Ubuntu Xenial وأعتقد أنه موجود في /usr/bin/python3
(لست متأكدًا تمامًا).
انظر هذه الإجابة: http://stackoverflow.com/questions/32429259/ansible-fails-with-bin-sh-1-usr-bin-python-not-found
لاحظ أنه من المهم تعطيل جمع الحقائق لمهام التهيئة.
نعم ، يمكن إعطاء مسار مترجم Python في وقت التشغيل كـ
-e 'ansible_python_interpreter = / usr / local / bin / python' أثناء تشغيل البرنامج النصي.
ولكن يجب أن يكون هناك طريقة ما في ملف التكوين غير القابل للكسر حيث يمكننا ذكر مسار مترجم بايثون أو هل هو موجود؟
إذا لم يكن هناك ، فلا بد من تنفيذه.
فقط استخدم ansible_python_interpreter=/usr/bin/python3
في ملف الجرد الخاص بك
@ guruprasad85 هذه المشكلة في انتظار ردكم. الرجاء الرد أو سيتم إغلاق القضية.
تضمين التغريدة شكرا لأخذ الوقت الكافي لفتح هذه القضية. لكي يتعامل المجتمع مع مشكلتك بفعالية ، نحتاج إلى مزيد من المعلومات.
فيما يلي العناصر التي لم نتمكن من العثور عليها في وصفك:
الرجاء تعيين وصف هذه المشكلة مع هذا النموذج:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md
نظرًا لأنني كنت بحاجة إلى python2 ، فقد أضفت المهمة الأولى:
- name: dependency provisioning
hosts: all
become: yes
become_method: sudo
gather_facts: false
tasks:
- name: install python2
raw: sudo apt-get -y install python-simplejson
المزيد من المعلومات هنا
@ guruprasad85 هذه المشكلة في انتظار ردكم. الرجاء الرد أو سيتم إغلاق القضية.
التفسيرات أعلاه كافية لحل هذه المشكلة.
بعض القراءات الإضافية:
http://docs.ansible.com/ansible/faq.html#how -do-i-handle-python-pathing-not-having-a-python-2-x-in-usr-bin-python-on- جهاز التحكم عن بعد
إذا كان لديك المزيد من الأسئلة ، يرجى التوقف عن طريق IRC أو القائمة البريدية:
يمكنك أيضًا تعطيل _Gathering Facts_ ، ضع هذا في كتابك
- hosts: anything
gather_facts: False
bcocasivel هناك أي خطط لإعادة النظر في هذا؟ يبدو لي أن Ansible يجب أن يحاول على الأقل استخدام /usr/bin/python3
(أو /usr/bin/python2
حسب الاقتضاء) إذا لم يكن /usr/bin/python
متاحًا.
ذكرت SpamapS أن Ubuntu /usr/bin/python3
:
ubuntu@ip-172-16-178-247:~$ uname -a
Linux ip-172-16-178-247 4.4.0-1065-aws #75-Ubuntu SMP Fri Aug 10 11:14:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-172-16-178-247:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
ubuntu@ip-172-16-178-247:~$ ls -al /usr/bin |grep python
lrwxrwxrwx 1 root root 26 May 18 2016 dh_pypy -> ../share/dh-python/dh_pypy
lrwxrwxrwx 1 root root 29 May 18 2016 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx 1 root root 23 Nov 28 2017 pdb3.5 -> ../lib/python3.5/pdb.py
lrwxrwxrwx 1 root root 31 Mar 23 2016 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root root 26 May 18 2016 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx 1 root root 9 Mar 23 2016 python3 -> python3.5
-rwxr-xr-x 2 root root 4464400 Nov 28 2017 python3.5
-rwxr-xr-x 2 root root 4464400 Nov 28 2017 python3.5m
-rwxr-xr-x 1 root root 976 Nov 27 2015 python3-jsondiff
-rwxr-xr-x 1 root root 3662 Nov 27 2015 python3-jsonpatch
-rwxr-xr-x 1 root root 1342 Oct 24 2015 python3-jsonpointer
lrwxrwxrwx 1 root root 10 Mar 23 2016 python3m -> python3.5m
للأجيال القادمة ، هذه فرصة تحسين معروفة لـ Ansible ويتم النظر في تضمينها في خريطة الطريق لـ> = 2.8
في حالتي (ansible 2.7.0):
myIp | باءت بالفشل! => {
"تغيرت": خطأ ،
"module_stderr": ""،
"module_stdout": "/ bin / sh: / usr / bin / python: لا يوجد مثل هذا الملف أو الدليل \ r \ n" ،
"msg": "MODULE FAILURE \ n انظر stdout / stderr لمعرفة الخطأ الدقيق" ،
"RC": 127
}
$ ll | grep python
lrwxrwxrwx 1 جذر الجذر 32 يونيو 5 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 34 Nov 16 2016 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 جذر الجذر 4864 29 مايو 2014 python2.6
-rwxr-xr-x 1 جذر الجذر 1418 29 مايو 2014 python2.6-config
لماذا لا تعمل softlink أيضًا؟
في حالتي (ansible 2.7.0):
myIp | باءت بالفشل! => {
"تغيرت": خطأ ،
"module_stderr": ""،
"module_stdout": "/ bin / sh: / usr / bin / python: لا يوجد مثل هذا الملف أو الدليل \ r \ n" ،
"msg": "MODULE FAILURE \ n انظر stdout / stderr لمعرفة الخطأ الدقيق" ،
"RC": 127
}$ ll | grep python
lrwxrwxrwx 1 جذر الجذر 32 يونيو 5 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 34 Nov 16 2016 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 جذر الجذر 4864 29 مايو 2014 python2.6
-rwxr-xr-x 1 جذر الجذر 1418 29 مايو 2014 python2.6-configلماذا لا تعمل softlink أيضًا؟
آسف ، هذا خطأي استخدم softlink ، إنه يعمل
بسيط: ln -s / usr / bin / python3 / usr / bin / python حل
فقط استخدم
ansible_python_interpreter=/usr/bin/python3
في ملف الجرد الخاص بك
شكرا ، إنه يعمل الآن
يبدو أن هذا به مشكلات مع pyenv pyenv global <version>
.
يجب أن يزيلها ، لكني أعتقد أن Ansible مشفر بشكل صارم للنظر إلى /usr/bin/python
، بدلاً من مجرد استخدام الأمر python
؟
إذا كان الأمر كذلك ، فهل من المحتمل أن يتغير هذا؟ أو هل هناك حل بديل يمكنني استخدامه؟
إذا كان الأمر كذلك ، فهل من المحتمل أن يتغير هذا؟
لا ليست كذلك.
ستحتاج إلى تعيين ansible_python_interpreter
صراحة لمترجم Python إذا كنت تريد استخدام شيء آخر غير /usr/bin/python
.
والذي في حالة pyenv
المحتمل أن يكون مجرد المسار إلى الرقاقة ( which python3.6
) أو إلى الثنائي الحقيقي ( pyenv which python3.6
). لاحظ ، في كثير من الحالات ، تحتاج إلى ترميز ثابت ولا يمكنك استخدام توسيع shell.
التعليق الأكثر فائدة
فقط استخدم
ansible_python_interpreter=/usr/bin/python3
في ملف الجرد الخاص بك