Ansible: module_stdout: "/ bin / sh: 1: / usr / bin / python: not found \ r \ n",

Созданный на 21 дек. 2016  ·  19Комментарии  ·  Источник: ansible/ansible

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": "ОТКАЗ МОДУЛЯ"
}

affects_2.3 needs_info needs_template

Самый полезный комментарий

Просто используйте ansible_python_interpreter=/usr/bin/python3 в вашем файле инвентаря

Все 19 Комментарий

Пожалуйста, используйте шаблон проблемы вместо его удаления - это не является действенным или полезным отчетом об ошибке. Я подозреваю, что вы используете 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 ). Обратите внимание, что во многих случаях вам нужно жестко запрограммировать код, который не может использовать расширение оболочки.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги