Saya menjalankan Ansible 2.2, tetapi dapat memutakhirkan jika itu membantu.
Saya melihat ini dan sangat bersemangat, tetapi sepertinya tidak ada dalam versi (atau apapun) dokumentasi Ansible ini.
Masalah yang saya coba selesaikan adalah saya punya 1000 pengguna yang perlu saya kelola pada kotak Centos.
Butuh waktu cukup lama untuk menjalankan tugas ini secara seri. Dan yang lebih menjengkelkan, semuanya muncul sebagai berubah karena perintah "kadaluwarsa" pada modul pengguna selalu menandai hal itu sebagai diubah.
ini juga tampak menjanjikan, tetapi butuh jumlah waktu yang sama untuk menjalankan setiap perintah dalam loop with_items dan tidak berjalan lebih cepat (saya tidak pernah repot-repot menunggu cukup lama untuk sampai ke akhir).
Melewati tugas cepat sekarang (jauh lebih cepat daripada di Ansible 2.0), jika saya tidak tahu cara membuat ini bekerja secara paralel, saya pikir saya akan kembali dan mencari cara untuk melewatkan tugas yang tidak berguna dan jika semua Jika tidak, saya akan menulis modul sendiri. Tapi sepertinya aku harus bisa melakukan ini lebih cepat di Ansible.
Ini yang ingin saya jalankan secara paralel, host_authorizations
adalah daftar nama pengguna dan data lainnya.
- name: Create/modify OS user accounts
user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}}
with_items: "{{ host_authorizations }}"
tags: full_maintenance
Jawaban:
Seperti @webKnja menyebutkan ini dimungkinkan dengan
async
mode. Baru-baru ini saya menemukannya sendiri dan mengetahui bahwa Anda dapat menggunakannya dalam 3 cara berbeda tergantung pada kebutuhan Anda.Jalankan dan polling hasilnya, perhatikan
poll:5
, Ini akan polling hasilnya setiap 5 detik. Anda dapat menghemat waktu dengan metode ini.Api dan lupakan
poll: 0
, ini adalah opsi yang sangat cepat karena Ansible itu hanya menembak keluar tugas-tugas itu. Sisi buruknya adalah bahwa kita tidak tahu apa hasil dari tugas yaituchanged: True/False
. Tentu saja itu kerugian jika Anda peduli dengan umpan balik;).Dipecat dan dilupakan
async_status
, sintaks untuk tugasnya sama dengan contoh 2 yang membutuhkan tugas tambahanasync_status
. Ini adalah favorit saya karena ini relatif cepat (lebih cepat dari perulangan normal atauexecute and poll
) dan memungkinkan Anda untuk menangkap umpan balik meskipun akan perlu berurusan dengan yang baruregister
untuk Andaasync_task
.retries: 20
- berapa banyak upaya sebelum gagal.delay: 2
- berapa detik untuk menunggu di antara jajak pendapat.Sebuah kata hati-hati , tergantung pada tugas kamu mungkin tidak dapat menggunakan
async
opsi. Saya punya contoh di mana saya berinteraksi dengan sistem yang tidak dapat menangani beberapa permintaan untuk sumber daya yang sama. Saya menemukanasync
opsi yang terbaik jika saya harus melakukan tugas yang sama di beberapa host. Di situlah saya bisa "menghemat" waktu paling banyak.Karena Anda memposting tautan ke dokumentasi yang dimungkinkan dalam pertanyaan, saya tidak akan melakukannya.
sumber
poll
nilai ke 0 pada contoh 3. Ini adalah penjelasan yang luar biasa !! Thnx.async_status
membutuhkanjid
, tidakid
.Untuk menjawab pertanyaan Anda: Tidak, sampai sekarang Ansible tidak dapat menjalankan loop secara paralel.
Saya akan menggunakan
newusers
, yang dibuat untuk pembuatan pengguna massal Buat file dengan semua pengguna di dalamnya, salin ke host, dan jalankannewusers /path/to/user/list
dalamcommand
tugas.sumber
Dimungkinkan untuk mencapai
async
mode penggunaan ini . Silakan temukan beberapa referensi untuk melakukannya di bawah ini.Referensi:
sumber