Ansible: module_stdout: "/ bin / sh: 1: / usr / bin / python: não encontrado \ r \ n",

Criado em 21 dez. 2016  ·  19Comentários  ·  Fonte: ansible/ansible

ansible -m ping -u ubuntu us-west-2a
35.166.197.222 | FRACASSADO! => {
"alterado": falso,
"falhou": verdadeiro,
"module_stderr": "Conexão compartilhada com 35.166.197.222 fechada. \ r \ n",
"module_stdout": "/ bin / sh: 1: / usr / bin / python: não encontrado \ r \ n",
"msg": "FALHA DO MÓDULO"
}

affects_2.3 needs_info needs_template

Comentários muito úteis

Basta usar ansible_python_interpreter=/usr/bin/python3 em seu arquivo de inventário

Todos 19 comentários

Use o modelo de problema em vez de excluí-lo - este não é um relatório de bug útil ou acionável. Suspeito que você esteja executando o Ubuntu 16+ ou qualquer outra coisa sem um python3 padrão instalado, mas não podemos dizer isso sem um relatório de bug completo.

As imagens mais recentes na AWS não têm um Python utilizável instalado ... você precisa adicionar isso como uma pré-tarefa:

  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

Preciso usar isso em minhas tarefas para fazer com que o AMI funcione bem com o Ansible.

Ubuntu Xenial tem Python3 instalado por padrão e acho que está localizado em /usr/bin/python3 (não tenho muita certeza embora).

Veja esta resposta: http://stackoverflow.com/questions/32429259/ansible-fails-with-bin-sh-1-usr-bin-python-not-found

Observe que é importante desativar a coleta de fatos para as tarefas de inicialização.

Sim, o caminho do interpretador python pode ser fornecido em tempo de execução como
-e 'ansible_python_interpreter = / usr / local / bin / python' durante a execução do script.

Mas deve haver alguma maneira no arquivo de configuração ansible onde podemos mencionar o caminho do interpretador python OU ele está lá?

Se não estiver lá, então ele precisa ser implementado.

Basta usar ansible_python_interpreter=/usr/bin/python3 em seu arquivo de inventário

@ guruprasad85 Este problema está aguardando sua resposta. Responda ou o problema será resolvido.

clique aqui para obter ajuda do bot

@ guruprasad85 Saudações! Obrigado por abrir este problema. Para que a comunidade lide com seu problema de forma eficaz, precisamos de um pouco mais de informações.

Aqui estão os itens que não encontramos na sua descrição:

  • Tipo de problema
  • versão ansible
  • Nome do componente

Defina a descrição deste problema com este modelo:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md

clique aqui para obter ajuda do bot

Como precisava do python2, adicionei como primeira tarefa:

- 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

Mais informações aqui

@ guruprasad85 Este problema está aguardando sua resposta. Responda ou o problema será resolvido.

clique aqui para obter ajuda do bot

As explicações acima são suficientes para resolver esse problema.

Algumas leituras adicionais:

http://docs.ansible.com/ansible/faq.html#how -do-i-handle-python-pathing-not-having-a-python-2-x-in-usr-bin-python-on- uma-máquina-remota

Se você tiver mais perguntas, pare no IRC ou na lista de e-mails:

Você também pode desabilitar o _Gathering Facts_, coloque isso em seu livro

- hosts: anything
  gather_facts: False

@bcoca @sivel há planos de revisitar isso? Parece-me que o Ansible deve pelo menos tentar usar /usr/bin/python3 (ou /usr/bin/python2 conforme apropriado) se /usr/bin/python não estiver disponível.
@SpamapS relatou que os AMIs oficiais do Ubuntu na AWS são enviados apenas com /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

Para a posteridade, esta é uma oportunidade de melhoria conhecida para Ansible e está sendo considerada para inclusão no roteiro para> = 2,8

No meu caso (ansible 2.7.0):
myIp | FRACASSADO! => {
"alterado": falso,
"module_stderr": "",
"module_stdout": "/ bin / sh: / usr / bin / python: Não existe esse arquivo ou diretório \ r \ n",
"msg": "FALHA DO MÓDULO \ nVeja stdout / stderr para o erro exato",
"rc": 127
}

$ ll | grep python
lrwxrwxrwx 1 root root 32 Jun 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 Set 8 2016 python2 -> python
-rwxr-xr-x 1 root root 4864 29 de maio de 2014 python2.6
-rwxr-xr-x 1 root root 1418 29 de maio de 2014 python2.6-config

porque o softlink também não funciona?

No meu caso (ansible 2.7.0):
myIp | FRACASSADO! => {
"alterado": falso,
"module_stderr": "",
"module_stdout": "/ bin / sh: / usr / bin / python: Não existe esse arquivo ou diretório \ r \ n",
"msg": "FALHA DO MÓDULO \ nVeja stdout / stderr para o erro exato",
"rc": 127
}

$ ll | grep python
lrwxrwxrwx 1 root root 32 Jun 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 Set 8 2016 python2 -> python
-rwxr-xr-x 1 root root 4864 29 de maio de 2014 python2.6
-rwxr-xr-x 1 root root 1418 29 de maio de 2014 python2.6-config

porque o softlink também não funciona?

desculpe, é minha culpa.Use softlink, funciona

um simples: ln -s / usr / bin / python3 / usr / bin / python resolveu meu problema

Basta usar ansible_python_interpreter=/usr/bin/python3 em seu arquivo de inventário

Obrigado, funciona agora

Isso parece ter problemas com pyenv pyenv global <version> .

Deve calçá-lo, mas estou supondo que o Ansible está codificado para olhar para /usr/bin/python , ao invés de apenas usar o comando python ?

Em caso afirmativo, é provável que isso mude? Ou existe uma solução alternativa que eu possa usar?

Em caso afirmativo, é provável que isso mude?

Não não é.

Você precisaria definir explicitamente ansible_python_interpreter como um interpretador python se quiser usar algo diferente de /usr/bin/python .

Que no caso de pyenv provavelmente seria apenas o caminho para o shim ( which python3.6 ) ou para o binário real ( pyenv which python3.6 ). Observe que, em muitas circunstâncias, você precisa codificar isso e não pode usar a expansão de shell.

Esta página foi útil?
0 / 5 - 0 avaliações