Ansible kończy się niepowodzeniem z / bin / sh: 1: / usr / bin / python: not found

187

Występuje błąd, którego nigdy wcześniej nie widziałem. Oto polecenie i błąd:

$ ansible-playbook create_api.yml

PLAY [straw] ******************************************************************

GATHERING FACTS ***************************************************************
failed: [104.55.47.224] => {"failed": true, "parsed": false}
/bin/sh: 1: /usr/bin/python: not found


TASK: [typical | install required system packages] *****************************
FATAL: no hosts matched or all hosts have already failed -- aborting


PLAY RECAP ********************************************************************
           to retry, use: --limit @/Users/john/create_api.retry

104.55.47.224               : ok=0    changed=0    unreachable=0    failed=1

Oto plik create_api.yml:

---

- hosts: api
  remote_user: root
  roles:
    - api

A oto plik hosts:

[api]
104.55.47.224

Mogę usunąć sekcję ról i nie przejdzie ona do pierwszego ZADANIA, zamiast tego sprawi, że dotrze tylko do linii /bin/sh: 1: /usr/bin/python: not found. Co tu się dzieje?


UWAGA: Jeśli ktoś pinguje adres IP i nie otrzyma odpowiedzi, powinieneś wiedzieć, że zmieniłem adres IP od czasu wklejenia kodu.

Python EDIT został zainstalowany lokalnie, problem polegał na tym, że nie został zainstalowany na komputerze zdalnym, na którym działał Ubuntu 15.04

jdavis
źródło

Odpowiedzi:

171

Natknąłem się na ten błąd podczas uruchamiania ansible na serwerze Ubuntu 15.10 , ponieważ jest on dostarczany z Pythonem 3.4.3 i ansible wymaga Python 2 .

Tak provision.ymlteraz wyglądam:

- hosts: my_app
  sudo: yes
  remote_user: root
  gather_facts: no
  pre_tasks:
    - name: 'install python2'
      raw: sudo apt-get -y install python

  tasks:
    - name: 'ensure user {{ project_name }} exists'
      user: name={{ project_name }} state=present
  • Nie zapomnij opcji -y (mówi tak dla wszystkich pytań) z apt-get (lub moduł raw utknie w ciszy)

  • gather_facts: no linia jest również krytyczna (ponieważ nie możemy zbierać faktów bez Pythona)

jeziora
źródło
12
Zatem kolejne role nie mogą wykorzystywać faktów ... czy istnieje sposób na ponowne zgromadzenie faktów? aha, stackoverflow.com/questions/31054453/…
stephen
16
Zauważ, że linia „gather_facts: no” jest również krytyczna.
rcreswick
6
@ surfer190 świetne znalezisko! Odkryłem również, że dodawanie action: setupjako ostatnie zadanie wstępne również działało świetnie :)
mrooney
1
@ surfer190 zobacz moją odpowiedź tutaj, jeśli używasz EC2 z ansible, możesz użyć CloudInit, aby zainstalować python2, abyś mógł jak zwykle zbierać fakty.
Miroslav
1
W przypadku, gdy ktoś również się zastanawia, nie trzeba uruchamiać rawzadania, aby zainstalować Python 2 pre_tasks; regularne też tasksdziała dobrze. Ale włączenie go pre_tasks, wraz z innym zadaniem wywołania setupmodułu Ansible , zapewni dostępność faktów dla wszystkich ról przypisanych do hosta.
Kenny Evitt,