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"
}
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á.
@ 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:
Establezca la descripción de este problema con esta plantilla:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md
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á.
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.
Comentario más útil
Simplemente use
ansible_python_interpreter=/usr/bin/python3
en su archivo de inventario