Introduction to Handlers
1. Handlers Nedir, Ne İşe Yarar?
Normalde bir konfigürasyon dosyasında değişiklik yaptığınızda, değişikliğin etkin olması için örneğin web servisinin yeniden başlatılması (restart) gerekir. Bunu manuel yapmak yerine Ansible’da Handlers tanımlayarak, ilgili “Task” bittiğinde servisin otomatik olarak restart edilmesini sağlayabilirsiniz.
Örnek Durum
Bir web sunucusunda
/etc/nginx/nginx.conf
dosyasını güncellediniz.Bu dosya değiştiyse “nginx servisini yeniden başlat” demek istersiniz.
Handler dediğimiz “otomatik tetiklenen bir görev” tam da burada devreye girer.
2. “notify” Mekanizması
Ansible’da Handlers şu mantıkla çalışır:
Task içinde
notify:
anahtarını kullanırsınız.notify:
ile bir handler adı verirsiniz (örn. “Restart Web Service”).Playbook’un sonunda,
handlers:
bölümünde bu adı taşıyan “handler” görevi tanımlarsınız.Eğer söz konusu Task changed (yani gerçekten bir değişiklik yaptıysa), Handler “tetiklenir” ve en sonda çalışır.
Bu sayede gereksiz restart’lar olmaz; eğer dosya zaten aynıysa, Handler atlanır.
3. Örnek Basit Playbook
Tasks Bölümü
copy:
modülü ile “app_code/” dizinindeki dosyaları “/opt/application/” konumuna kopyalıyor.Bu kopyalama gerçekten yeni bir dosya kopyaladıysa, “changed” olur, ve
notify: Restart Application Service
ifadesi devreye girer.
Handlers Bölümü
“Restart Application Service” adlı bir handler var.
Bu handler,
service:
modülü kullanarak “application_service” adındaki servisi “restarted” (yeniden başlatılmış) durumda olmasını garanti eder.
Sonuç: Uygulama kodu her güncellendiğinde, Ansible otomatik olarak ilgili servisi restart ediyor. Manuel uğraş yok.
4. Handlers’ın Avantajları
Otomasyon: Bir konfig değiştiğinde veya yeni kod deploy edildiğinde servisi kendiliğinden yeniden başlatır.
İdempotent: Sadece gerçekten “changed” (değişiklik olmuş) durumda tetiklenir, aksi halde boşa restart yapmaz.
Daha Az Hata: İnsan hatası (restart unutma vb.) riskini düşürür.
Daha Temiz Yapı: Playbook’larınızda “kodu kopyala → servisi restart et” gibi mantığı net bir şekilde ayırırsınız.
5. Özet
Handlers, Ansible’ın “değişiklik sonrasında ek işlem yap” mekanizmasıdır.
Task’ınızda
notify:
kullanarak bir handler’ı çağırırsınız, eğer Task gerçekten bir yenilik yaptıysa, handler “changed” sinyali alır ve Playbook’un sonunda o işlemi (ör. restart) yapar.Böylece konfig/uygulama değiştikçe otomatik işlemler (servis restart gibi) sistemli ve güvenilir biçimde gerçekleştirilir.
Last updated
Was this helpful?