Trong bài này, chúng ta sẽ tìm hiểu về một khái niệm rất đơn giản nhưng cực kỳ hữu ích đó là Ansible Handler.
Xem thêm:
Ansible Modules – Bài 7
1. Handler là gì?
Hiểu đơn giản, Handler là một loại task đặc biệt, chỉ được thực thi khi có một task khác “gọi” nó bằng notify.
Bạn có thể hiểu Handler như là “việc cần làm sau khi có thay đổi”.
Ví dụ:
- Nếu bạn copy một file config mới, thì bạn cần restart lại dịch vụ để áp dụng.
- Nhưng nếu file đó không thay đổi, thì không cần restart — tránh restart không cần thiết.
2. Cách hoạt động của Handler
Cơ chế hoạt động của Handler rất đơn giản:
- Một task có thể làm thay đổi hệ thống (ví dụ: copy file)
- Nếu có thay đổi, task đó sẽ gửi notify đến một Handler
- Handler sẽ được thực thi ở cuối play
Nếu không có thay đổi gì, Handler sẽ không chạy
Một điểm quan trọng:
Handler chỉ được thực thi sau khi toàn bộ các task còn lại chạy xong.
Tức là:
- Ansible ghi nhớ rằng Handler cần chạy
- Nhưng chờ đến cuối mới thực sự chạy
Điều này giúp đảm bảo handler không bị gọi nhiều lần nếu có nhiều task cùng notify nó.
3. Cách khai báo Handler
Bước 1: Gọi Handler trong task bằng notify
- name: Copy file cấu hình nginx
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
notify: Restart Nginx
Bước 2: Khai báo Handler
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
Lưu ý:
handlers:phải nằm cùng cấp độ thụt lề vớitasks:- Tên handler trong
notifyphải khớp tuyệt đối với tên khai báo
Notify nhiều handler cùng lúc:
notify:
- Reload Nginx
- Restart PHP
Dùng when với Handler
Bạn có thể thêm điều kiện trong handler như bình thường:
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
when: ansible_facts['os_family'] == 'Debian'
4.Ví dụ tổng hợp
- name: Cấu hình nginx
hosts: web
become: yes
tasks:
- name: Copy file config
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
notify: Restart Nginx
- name: Tạo thư mục log
file:
path: /var/log/nginx
state: directory
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
Qua bài này, bạn đã hiểu Handler là gì và khi nào cần dùng nó. Đây là công cụ cực kỳ hữu ích giúp bạn đảm bảo dịch vụ được cập nhật đúng cách mà không gây restart không cần thiết.
Bài viết cùng chủ đề:
Ansible Variables – Biến trong Ansible là gì và cách sử dụng – Bài 5
Ansible Inventory – Bài 3
ansible playbook là gì? Cấu trúc và cách viết chuẩn – Bài 4