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 stop

2. Ç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

Dağı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

Yü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

SMTP server dengesiz; “notification e-mail” task’ı çalışsa güzel, çalışmazsa da playbook çökmesin:

6. Çıktıya bakıp “fail” dedirt — failed_when

Log’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 ERROR kelimesi 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.).

Ne?
Nasıl?

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?