Saya mengalami kesalahan yang belum pernah saya lihat sebelumnya. Inilah perintah dan kesalahannya:
$ 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
Ini file create_api.yml:
---
- hosts: api
remote_user: root
roles:
- api
Dan inilah file hosts:
[api]
104.55.47.224
Saya dapat menghapus bagian peran dan itu tidak akan sampai ke TUGAS pertama, itu malah akan membuatnya hanya ke baris /bin/sh: 1: /usr/bin/python: not found
. Apa yang mungkin terjadi di sini?
CATATAN: Jika ada orang yang melakukan ping alamat IP dan gagal mendapatkan respons, Anda harus tahu saya telah mengubah alamat IP sejak menempelkan kode.
EDIT python diinstal secara lokal, masalahnya adalah itu tidak diinstal pada mesin jarak jauh, yang menjalankan Ubuntu 15.04
sumber
action: setup
sebagai pre_task terakhir juga bekerja dengan sangat baik :)raw
tugas untuk menginstal Python 2 dipre_tasks
; biasa jugatasks
berfungsi dengan baik. Tetapi memasukkannyapre_tasks
, dengan tugas lain untuk memanggilsetup
modul Ansible juga, akan memastikan fakta tersedia untuk setiap peran yang ditugaskan ke tuan rumah.An 2.2 dilengkapi fitur pratinjau teknologi dukungan Python 3. Untuk memanfaatkan ini (jadi Anda tidak perlu menginstal Python 2 di Ubuntu 16.04), cukup atur
ansible_python_interpreter
opsi konfigurasi ke/usr/bin/python3
. Ini dapat dilakukan berdasarkan per-host dalam file inventaris Anda:sumber
Solusi 1:
Jika Anda menggunakan
Ansible >2.2.0
, Anda dapat mengaturansible_python_interpreter
opsi konfigurasi ke/usr/bin/python3
:atau dalam file inventaris Anda:
Solusi 2:
Jika Anda menggunakan
Ansible <2.2.0
maka Anda dapat menambahkan inipre_tasks
ke buku pedoman Anda:UPDATE Dengan
ansible 2.8.x
, Anda tidak perlu khawatir tentang hal itu, itu bekerja di luar kotak untuk python> 3,5 untuk kedua controller dan mesin target (s)sumber
ansible 2.3.0.0
dan itu tidak berhasil di luar kotak. Kesalahan yang sama seperti yang diposting oleh OP.Anda dapat menggunakan modul mentah untuk menginstal Python di host jarak jauh:
sumber
pre_tasks: - raw: sudo apt-get install python-simplejson
python-simplejson
ditulis dalam Python dan karenanya membutuhkan Python. simplejson juga merupakan persyaratan untuk sebagian besar modul inti Ansible. Dengan menginstalpython-simplejson
melaluiapt-get
/yum
Anda juga menginstal Python dan karena itu mencakup semua dependensi dasar yang mungkin ...Untuk meringkas jawaban orang lain, berikut adalah pengaturan gabungan yang berfungsi untuk saya:
sumber
Saya pribadi menemukan 3 solusi yang mungkin untuk masalah ini yang bekerja dengan baik dalam situasi yang berbeda:
Opsi 1 - Tetapkan
ansible_python_interpreter: /usr/bin/python3
untuk host yang telahpython3
menginstal secara defaultSaya pikir ini adalah metode yang unggul untuk memecahkan masalah jika Anda memiliki cara untuk mengelompokkan host Anda dengan apakah mereka telah
python3
menginstal secara default atau tidak . Sejauh yang saya ketahui,python3
tersedia di semua rilis Ubuntu 16.04 dan lebih tinggi.python3
, Anda dapat menambahkan variabel kegroup_vars/all.yml
(atau yang setara) Anda:python3
dan Anda memiliki cara untuk memberi tag mereka ketika menggunakan inventaris dinamis (mis. Untuk penandaan AWSec2.py
), Anda dapat menerapkan variabel ke host tertentu seperti ini:python3
, Anda dapat melakukan sesuatu seperti ini:Saya paling suka opsi ini karena tidak memerlukan perubahan pada host jarak jauh dan hanya perubahan kecil pada variabel, yang bertentangan dengan opsi 2 dan 3, yang membutuhkan penambahan untuk setiap buku pedoman.
Opsi 2 - Instal Python 2 menggunakan
raw
Opsi ini mengharuskan Anda meletakkan permainan di bagian atas setiap buku pedoman
gather_facts: false
yang digunakanraw
untuk memasangpython
:ignore_errors: true
diperlukan jika Anda berencana untuk menjalankan permainan pada host yang belumapt-get
menginstal (misalnya apa pun berbasis RHEL), jika tidak mereka akan kesalahan dalam bermain pertama.Solusi ini berfungsi, tetapi merupakan yang terendah dalam daftar saya karena beberapa alasan:
apt
ada pada sistem dan mengabaikan kesalahan (tidak seperti opsi 3)apt-get
perintah lambat (tidak seperti opsi 3)Opsi 3 -
/usr/bin/python -> /usr/bin/python3
Menggunakan tautanraw
Saya belum melihat solusi yang diusulkan oleh orang lain. Ini tidak ideal, tapi saya pikir itu lebih unggul dari opsi 2 dalam banyak hal. Saran saya adalah menggunakan
raw
menjalankan perintah shell untuk symlink/usr/bin/python -> /usr/bin/python3
jikapython3
ada pada sistem danpython
tidak:Solusi ini mirip dengan opsi 2 di mana kita perlu meletakkannya di bagian atas setiap buku pedoman, tapi saya pikir itu unggul dalam beberapa cara:
python3
ada danpython
tidak ada - itu tidak akan menimpa Python 2 jika sudah diinstalapt
diinstalapt-get
Tentunya jika Anda perlu menginstal Python 2 di
/usr/bin/python
, solusi ini adalah no go dan opsi 2 lebih baik.Kesimpulan
python3
, membuat opsi 1 jauh lebih sulit dan rawan kesalahan./usr/bin/python
.Sumber
/usr/bin/python: not found
kesalahan dalam Ansibleraw
Modul Ansible Docssumber
Anda perlu python 2.7 untuk menjalankan Ansible. Di Ubuntu 16.04, Anda dapat menginstalnya melalui perintah ini:
sudo apt-get install python-minimal
Setelah itu, saya bisa lari
ansible-playbook -i inventories/staging playbook.yml
Silakan periksa lebih lanjut di Menggunakan ansible di Ubuntu 16.04
sumber
Apa yang saya gunakan untuk menjalankan ini di ubuntu 15.10 pada tetesan Digital Ocean baru:
Untuk ubuntu 16.04 pada SSD OVH yang baru, saya harus apt-get upgrade sebelum paket python2 tersedia.
sumber
Saya menemukan bahwa sebenarnya mungkin untuk memiliki beberapa permainan dalam satu buku pedoman, jadi pengaturan saya sekarang berisi permainan "penyediaan ketergantungan" yang berjalan pada semua host, dan drama lain untuk host tertentu. Jadi tidak ada lagi
pre_tasks
.Sebagai contoh:
sumber
Seperti yang orang lain katakan, ini disebabkan oleh hilangnya python2. Jawaban lain di sini memberikan solusi
pre_tasks
dangather_facts: no
, namun jika Anda menggunakan EC2 dan memutar instance dengan memungkinkan, Anda dapat menggunakanuser_data
opsi:Maka orang biasanya menunggu ssh tersedia seperti ini:
Namun saya telah menemukan, bahwa ini tidak selalu cukup lama karena CloudInit dieksekusi cukup terlambat dalam proses boot sehingga python2 masih mungkin tidak diinstal tepat setelah ssh tersedia. Jadi saya telah menambahkan jeda jika instance baru saja dibuat:
Ini akan melakukan pekerjaan dengan sempurna dan sebagai keuntungan Anda tidak memeriksa python2 pada setiap kali menjalankan dan Anda tidak perlu melakukan solusi untuk mengumpulkan fakta nanti.
Saya yakin penyedia cloud lainnya menyediakan fungsionalitas CloudInit yang serupa, jadi sesuaikan untuk kasus penggunaan Anda.
sumber
Mereka yang menggunakan Packer dapat menemukan solusi di bawah ini bermanfaat
mari kita asumsikan bahwa Anda menggunakan penyedia pembungkus yang mungkin, konfigurasi Anda mungkin terlihat seperti di bawah ini
Anda dapat menginstal python menggunakan penyedia shell terlebih dahulu kemudian mengkonfigurasi opsi ansible_python_intepreter seperti yang ditunjukkan di bawah ini
sumber
Secara default, Ansible membutuhkan Python 2 , namun, Ansible 2.2+ dapat bekerja dengan Python 3 juga.
Jadi instal Python 2 menggunakan
raw
modul , misatau setel
ansible_python_interpreter
variabel dalam file inventaris, seperti:Untuk Docker, Anda dapat menambahkan baris berikut:
atau jalankan sebagai:
sumber
Menurut Gist ini Anda dapat menginstal Python2 di Ubuntu 16.04 sebagai berikut:
sumber
Banyak jawaban .. Terima kasih telah memposting karena saya juga mulai dari halaman ini!
Saya melakukan sedikit penggalian dan solid dengan Ubuntu 14.04LTS, Ubuntu 15.04LTS tampaknya telah menjatuhkan yang terbaru
python
, dan Ubuntu 16.04LTS tampaknya telah turunaptitude
.Saya melakukan tindakan berikut di bootstrap saya sebelum melakukan
apt
panggilan:Jika Anda mengelola di
become
tempat lain, jangan ragu untuk menghapusnya.Sumber:
sumber
Saya dapat memperbaiki masalah yang sama dengan menginstal Python pada mesin target yaitu mesin yang ingin kita SSH. Saya telah menggunakan perintah berikut:
sumber
@Miroslav, terima kasih telah menunjukkan saya ke arah yang benar. Saya menggunakan
user_data
dalamec2_instance
modul juga dan itu berfungsi seperti hadiah.Yaitu
sumber
Anda dapat menunjukkan ke Ubuntu 18.04 bahwa Anda ingin menggunakan python3 sebagai prioritas pertama
/usr/bin/python
.sumber
Saya memiliki masalah yang sama, sampai saya menyadari Anda juga perlu menginstal python pada host jarak jauh serta mesin lokal Anda sendiri. sekarang berhasil!
sumber
Kami hanya mengalami ini.
Kami menggunakan ubuntu 16.04 di gelandangan jadi jika Anda tidak menggunakan gelandangan komentar saya tidak ada gunanya.
Kami memasang plugin gelandangan berikut (pemicu, shell-commander) dan kami mendapatkan python 2.7.6 diinstal pada mesin (yang bukan tanpa plugin thioose) dan setelah memungkinkan dapat menggunakan
Itu adalah tes terakhir kami, kalau tidak kami akan memasukkan instalasi ini dalam perintah shell dalam file Vagrant
Semoga bisa membantu seseorang
sumber
gather_facts: no
baris ke dalam- yang membutuhkan python. Kemungkinan lainnya adalah Anda juga perlu python pada mesin host, tetapi saya kira itu akan menyebabkan Anda melakukan kesalahan lebih awal dalam prosesnya.