Bagaimana cara menjalankan yang mungkin pada satu host pada satu waktu dan istirahat pada kegagalan

15

Saya punya buku pedoman Ansible di mana saya ingin memperbarui sejumlah perangkat terkelupas secara berurutan. Saya dapat menggunakan serial:1, tetapi saya ingin menghentikan buku pedoman sama sekali jika saya mengalami kegagalan sehingga saya dapat memperbaikinya sebelum melanjutkan alih-alih mengumpulkan kesalahan.

Saya juga ingin me-restart playbook di host yang sama saya berhenti. Saat ini menggunakan Ansible v2.0, tetapi juga dapat beralih ke versi yang lebih baru jika fitur semacam itu hanya tersedia di versi yang lebih baru.

Peter Turner
sumber

Jawaban:

15

Buku pedoman Anda akan berhenti ketika terjadi kegagalan dan Anda menggunakan serial: 1sesuai dengan dokumentasi .

Secara default, Ansible akan terus menjalankan tindakan selama ada host di grup yang belum gagal.

Yang mengatakan tampaknya ada beberapa kebingungan di masyarakat tentang perilaku default, dan tampaknya telah berubah - atau menjadi buggy - di suatu tempat antara 1,8 dan 2.1.

Jadi, jika serial: 1tidak cukup, gunakan pengaturan tambahan ini:

max_failure_percentage: 0

Dalam beberapa situasi, seperti dengan pembaruan bergulir yang dijelaskan di atas, mungkin diinginkan untuk membatalkan permainan ketika ambang kegagalan tertentu telah tercapai. Untuk mencapai ini, pada versi 1.3 Anda dapat mengatur persentase kegagalan maksimum ...

==

Sedangkan untuk mencoba kembali buku pedoman Anda, Anda akan melihat pesan kegagalan seperti ini:

to retry, use: --limit @/home/user/site.retry

Gunakan --limitbendera itu dan pada eksekusi Anda berikutnya ansible-playbookdan itu akan melanjutkan dari tempat gagal.

Coba lagi file akan dibuat kecuali Anda telah mengatur retry_files_enabled = Falsekonfigurasi Anda.

Atau, --start-at-taskbisa juga berfungsi.

Sumber:

https://github.com/ansible/ansible/issues/1663

https://github.com/ansible/ansible/issues/16241

http://docs.ansible.com/ansible/playbooks_delegation.html#rolling-update-batch-size

http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage

http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled

http://docs.ansible.com/ansible/playbooks_startnstep.html#start-at-task

Hunter Hutan
sumber
1
Jika ada yang lebih tahu apa yang terjadi pada perubahan / bug di 1.9 dan 2.0 tolong beri tahu saya dan saya akan memperbarui jawaban ini.
Woodland Hunter
Ya, saya tahu bahwa 2.0 kemungkinan akan terus berjalan di host lain jika gagal pada salah satu dari mereka. Saya kira saya tidak berpikir itu akan memiliki perilaku yang berbeda jika saya menjalankan serial: 1. Itukah yang kamu katakan?
Peter Turner
Itu benar, serial: 1 harus memiliki perilaku itu, dan jika tidak (karena ??) tambahkan max_failure_percentage: 0 juga. Saya juga menyarankan untuk memutakhirkan Ansible karena 2.0 memiliki banyak bug.
Woodland Hunter
Begitu banyak bug, pada kenyataannya, Anda kehilangan file .retry dalam 2.0! github.com/ansible/ansible/issues/13944
Woodland Hunter
Heh, jadi saya bukan satu-satunya yang terus-menerus menambal sumbernya. Senang mendengarnya.
Peter Turner