Configure error handling
1. Tek sunucuda hata senaryosu
Ansible task’ları sırayla çalıştırır.
Bir task FAILED olursa playbook hemen durur.
Tek makinede bu aslında iyi bir şey: Daha fazla bozmadan durur.
- hosts: server1
tasks:
- name: Install dependencies
# ...
- name: Run web-server
# hata -> playbook stop2. Çoklu sunucuda (default davranış)
Her task tüm hostlar üzerinde biter, sonra sonraki task’a geçer.
Bir host’ta task patlarsa, o host listeden çıkar, kalan host’larda devam eder.
Ama playbook sonuna kadar sürer, raporda “FAILED” hostları görürsün.
3. “Hiç taviz yok” dersi — any_errors_fatal: true
any_errors_fatal: trueDağıtımın her yerde tutarlı olmak zorundaysa:
Bir host, bir task’ta çuvalladı mı? Ansible tüm playbook’u iptal eder.
4. “Belli bir eşiğe kadar sorun yok” — max_fail_percentage
max_fail_percentageYüzlerce sunucuya rollout yapıyorsun, %5’i patlayabilir, dert etme; ama %30’dan fazlası patlarsa muhtemelen gömülü hatan var:
Task başına hesaplar; toplam fail yüzdesi %30’u aşarsa playbook stop.
5. Kritik olmayan task’ı yok say — ignore_errors: yes
ignore_errors: yesSMTP server dengesiz; “notification e-mail” task’ı çalışsa güzel, çalışmazsa da playbook çökmesin:
6. Çıktıya bakıp “fail” dedirt — failed_when
failed_whenLog’larda “ERROR” varsa task’ı bilinçli olarak fail edelim:
Task teknik olarak başarılı çalışsa bile (
rc = 0), koşul sağlanırsa Ansible onu FAILED sayar.
'ERROR' in log_out.stdout→ Python’daki “içinde mi?” testi.
Metnin herhangi bir yerinde büyük harfle
ERRORkelimesi geçiyorsa True döner.Geçmiyorsa False döner.
7. Blok + Rescue tekrar (error handling’in süper gücü)
block: normal görevler.
rescue: block içindeki herhangi bir task fail ederse hemen çalışır.
always: her koşulda (başarılı/başarısız) en sonda çalışır (cleanup, log, vs.).
Anında stop
any_errors_fatal: true
Yüzdelik eşik
max_fail_percentage: <int>
Task hatasını yok say
ignore_errors: yes
Koşullu fail
failed_when:
Try/Catch benzeri
block / rescue / always
Last updated
Was this helpful?