पाठ 14 / 26

Handlers: सिर्फ़ बदलाव पर कर्म

Configuration सचमुच बदली हो तभी services restart या reload करने के लिए notify और handlers उपयोग करें।

ज़रूरत पर ही restart

Handler ऐसा task है जो तभी चलता है जब कोई दूसरा task उसे notify करे, और केवल तब जब वह task changed बताए। Handlers play के अंत में एक बार चलते हैं, चाहे कई बार notify हुए हों। Config बदलने के बाद service को हर run पर बेवजह restart किए बिना reload करने का यही मानक तरीक़ा है।

Handler का असर

site.yml के पहले और दूसरे runs को याद करें। पहले run में template बदला, इसलिए Reload app हर host के लिए चला। दूसरे run में कुछ नहीं बदला, इसलिए handler बिल्कुल नहीं चला। असली handlers debug की जगह ansible.builtin.service या systemd बुलाते हैं।

  tasks:
    - name: Deploy nginx config
      ansible.builtin.template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Reload nginx

  handlers:
    - name: Reload nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

क्रम मायने रखे तो flush करें

बाद के task को पहले service reload चाहिए तो अंत तक रुकने की जगह उस बिंदु पर लंबित handlers चलाने के लिए - meta: flush_handlers जोड़ें।

त्वरित जाँच: Handler कब चलता है?

  • कभी नहीं
  • हर run पर, हमेशा
  • पहले task से पहले
  • जब changed बताने वाला task उसे notify करे
Answer

जब changed बताने वाला task उसे notify करे — Handlers सिर्फ़ बदलाव पर, play के अंत में एक बार चलते हैं।