ansible -m ping -u ubuntu us-west-2a
35.166.197.222 | НЕ СМОГЛИ! => {
"изменено": ложь,
"не удалось": правда,
"module_stderr": "Общее соединение с 35.166.197.222 закрыто. \ r \ n",
"module_stdout": "/ bin / sh: 1: / usr / bin / python: not found \ r \ n",
"msg": "ОТКАЗ МОДУЛЯ"
}
Пожалуйста, используйте шаблон проблемы вместо его удаления - это не является действенным или полезным отчетом об ошибке. Я подозреваю, что вы используете Ubuntu 16+ или что-то еще без установленного по умолчанию python3, но мы не можем сказать об этом без полного отчета об ошибке.
В последних образах в AWS нет установленного Python, пригодного для использования ... вам нужно добавить это в качестве предварительной задачи:
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.
В Ubuntu Xenial по умолчанию установлен Python3, и я думаю, что он находится по адресу /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' при запуске скрипта.
Но в доступном файле конфигурации должен быть какой-то способ, где мы можем указать путь интерпретатора python ИЛИ он там?
Если нет, то его нужно реализовать.
Просто используйте ansible_python_interpreter=/usr/bin/python3
в вашем файле инвентаря
@ guruprasad85 Этот вопрос ждет вашего ответа. Пожалуйста, ответьте или проблема будет закрыта.
@ 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-Have-a-python-2-x-in-usr-bin-python-on- удаленная машина
Если у вас есть дополнительные вопросы, зайдите в IRC или в список рассылки:
Вы также можете отключить _Gathering Facts_, поместив это в свою книгу
- hosts: anything
gather_facts: False
@bcoca @sivel есть ли планы вернуться к этому? Мне кажется, что Ansible должен хотя бы попытаться использовать /usr/bin/python3
(или /usr/bin/python2
в зависимости от ситуации), если /usr/bin/python
недоступен.
@SpamapS сообщил, что официальные образы Ubuntu AMI на AWS поставляются только с /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.
В моем случае (доступный 2.7.0):
myIp | НЕ СМОГЛИ! => {
"изменено": ложь,
"module_stderr": "",
"module_stdout": "/ bin / sh: / usr / bin / python: нет такого файла или каталога \ r \ n",
"msg": "ОТКАЗ МОДУЛЯ \ nСм. stdout / stderr для точного определения ошибки",
«rc»: 127
}
$ ll | grep python
lrwxrwxrwx 1 root root 32 5 июня, 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 корень корень 34 16 ноября 2016 г. python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 корень корень 6 сентября 8 2016 python2 -> python
-rwxr-xr-x 1 root root 4864 29 мая 2014 г. python2.6
-rwxr-xr-x 1 корень корень 1418 29 мая 2014 python2.6-config
почему софтлинк тоже не работает?
В моем случае (доступный 2.7.0):
myIp | НЕ СМОГЛИ! => {
"изменено": ложь,
"module_stderr": "",
"module_stdout": "/ bin / sh: / usr / bin / python: нет такого файла или каталога \ r \ n",
"msg": "ОТКАЗ МОДУЛЯ \ nСм. stdout / stderr для точного определения ошибки",
«rc»: 127
}$ ll | grep python
lrwxrwxrwx 1 root root 32 5 июня, 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 корень корень 34 16 ноября 2016 г. python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 корень корень 6 сентября 8 2016 python2 -> python
-rwxr-xr-x 1 root root 4864 29 мая 2014 г. python2.6
-rwxr-xr-x 1 корень корень 1418 29 мая 2014 python2.6-configпочему софтлинк тоже не работает?
извините, это моя вина. используйте софтлинк, он работает
простой: 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
). Обратите внимание, что во многих случаях вам нужно жестко запрограммировать код, который не может использовать расширение оболочки.
Самый полезный комментарий
Просто используйте
ansible_python_interpreter=/usr/bin/python3
в вашем файле инвентаря