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

Creado en 21 dic. 2016  ·  19Comentarios  ·  Fuente: ansible/ansible

ansible -m ping -u ubuntu us-west-2a
35.166.197.222 | ¡FALLIDO! => {
"cambiado": falso,
"fallido": cierto,
"module_stderr": "Conexión compartida a 35.166.197.222 cerrada. \ r \ n",
"module_stdout": "/ bin / sh: 1: / usr / bin / python: no encontrado \ r \ n",
"msg": "FALLO DEL MÓDULO"
}

affects_2.3 needs_info needs_template

Comentario más útil

Simplemente use ansible_python_interpreter=/usr/bin/python3 en su archivo de inventario

Todos 19 comentarios

Utilice la plantilla de problemas en lugar de eliminarla; este no es un informe de error útil ni procesable. Sospecho que está ejecutando Ubuntu 16+ o algo más sin un python3 predeterminado instalado, pero no podemos decirlo sin un informe de error completo.

Las imágenes más recientes de AWS no tienen un Python utilizable instalado ... debe agregar esto como una tarea previa:

  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

Tengo que usar esto en mis tareas para que AMI funcione bien con Ansible.

Ubuntu Xenial tiene Python3 instalado de forma predeterminada y creo que está ubicado en /usr/bin/python3 (aunque no estoy muy seguro).

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

Tenga en cuenta que es importante deshabilitar la recopilación de datos para las tareas de inicialización.

Sí, la ruta del intérprete de Python se puede dar en tiempo de ejecución como
-e 'ansible_python_interpreter = / usr / local / bin / python' mientras se ejecuta el script.

Pero tiene que haber alguna forma en el archivo de configuración ansible donde podamos mencionar la ruta del intérprete de Python O ¿está allí?

Si no está allí, entonces debe implementarse.

Simplemente use ansible_python_interpreter=/usr/bin/python3 en su archivo de inventario

@ guruprasad85 Este problema está esperando su respuesta. Responde o el problema se cerrará.

haga clic aquí para obtener ayuda con el bot

@ guruprasad85 ¡Saludos! Gracias por tomarse el tiempo para abrir este problema. Para que la comunidad maneje su problema de manera efectiva, necesitamos un poco más de información.

Estos son los elementos que no pudimos encontrar en su descripción:

  • Tipo de problema
  • versión ansible
  • Nombre del componente

Establezca la descripción de este problema con esta plantilla:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md

haga clic aquí para obtener ayuda con el bot

Como necesitaba python2, agregué como primera tarea:

- 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

Más información aquí

@ guruprasad85 Este problema está esperando su respuesta. Responde o el problema se cerrará.

haga clic aquí para obtener ayuda con el bot

Las explicaciones anteriores son suficientes para resolver este problema.

Alguna lectura adicional:

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

Si tiene más preguntas, visite el IRC o la lista de correo:

También puede desactivar _Recopilación de datos_, poner esto en su libro

- hosts: anything
  gather_facts: False

@bcoca @sivel ¿hay algún plan para revisar esto? Me parece que Ansible debería al menos intentar usar /usr/bin/python3 (o /usr/bin/python2 según corresponda) si /usr/bin/python no está disponible.
@SpamapS informó que las /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 la posteridad, esta es una oportunidad de mejora conocida para Ansible y se está considerando su inclusión en la hoja de ruta para> = 2.8

En mi caso (ansible 2.7.0):
myIp | ¡FALLIDO! => {
"cambiado": falso,
"module_stderr": "",
"module_stdout": "/ bin / sh: / usr / bin / python: No existe tal archivo o directorio \ r \ n",
"msg": "FALLO DEL MÓDULO \ nVer stdout / stderr para conocer el error exacto",
"rc": 127
}

$ ll | grep python
lrwxrwxrwx 1 raíz raíz 32 5 de junio 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 raíz raíz 34 16 de noviembre de 2016 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 raíz raíz 6 8 de septiembre de 2016 python2 -> python
-rwxr-xr-x 1 raíz raíz 4864 29 de mayo de 2014 python2.6
-rwxr-xr-x 1 raíz raíz 1418 29 de mayo de 2014 python2.6-config

¿Por qué softlink tampoco funciona?

En mi caso (ansible 2.7.0):
myIp | ¡FALLIDO! => {
"cambiado": falso,
"module_stderr": "",
"module_stdout": "/ bin / sh: / usr / bin / python: No existe tal archivo o directorio \ r \ n",
"msg": "FALLO DEL MÓDULO \ nVer stdout / stderr para conocer el error exacto",
"rc": 127
}

$ ll | grep python
lrwxrwxrwx 1 raíz raíz 32 5 de junio 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 raíz raíz 34 16 de noviembre de 2016 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 raíz raíz 6 8 de septiembre de 2016 python2 -> python
-rwxr-xr-x 1 raíz raíz 4864 29 de mayo de 2014 python2.6
-rwxr-xr-x 1 raíz raíz 1418 29 de mayo de 2014 python2.6-config

¿Por qué softlink tampoco funciona?

lo siento, es mi culpa. Usa softlink, funciona

un simple: ln -s / usr / bin / python3 / usr / bin / python resolvió mi problema

Simplemente use ansible_python_interpreter=/usr/bin/python3 en su archivo de inventario

Gracias, funciona ahora

Esto parece tener problemas con pyenv pyenv global <version> .

Debería calzarlo, pero supongo que Ansible está codificado para mirar /usr/bin/python , en lugar de simplemente usar el comando python .

Si es así, ¿es probable que esto cambie alguna vez? ¿O hay alguna solución alternativa que pueda utilizar?

Si es así, ¿es probable que esto cambie alguna vez?

No, no es.

Debería establecer explícitamente ansible_python_interpreter en un intérprete de Python si desea usar algo diferente a /usr/bin/python .

Lo que en el caso de pyenv probablemente sería solo la ruta al shim ( which python3.6 ) o al binario real ( pyenv which python3.6 ). Tenga en cuenta que, en muchas circunstancias, necesita codificar eso y no puede usar la expansión de shell.

¿Fue útil esta página
0 / 5 - 0 calificaciones