Ansible: Tìm hiểu cấu hình Handler trong Ansible Playbook | Yoyo, chào các bạn, chúng ta cùng tiếp tục Series về chương trình Ansible nhé. Hôm nay bạn sẽ tìm hiểu cách sử dụng tác vụ ‘Handler‘ trong Ansible để thực thi khi kết thúc 1 tác vụ task trong playbook ansible.
Có thể bạn quan tâm chủ đề khác
– Cấu hình Ansible Retry Task
– Các mẹo tăng tốc độ thực thi của Ansible
– Hướng dẫn sử dụng Ansible Ad-hoc cơ bản
– Ebook Ansible for DevOps
– Ebook Mastering Ansible
1. Handler Ansible là gì ?
Ok, handler trong Ansible là gì ? Handler là một tác vụ y như ‘task’ trong playbook nhưng khác ở chỗ ‘task‘ được tự động khởi chạy theo flow cấu hình hoặc theo ‘tag‘ còn ‘handler‘ thì không thể khởi chạy nếu không có tín hiệu (notify) triệu gọi sử dụng.
Tóm gọn
- handler : là danh sách một hoặc nhiều tác vụ chờ được triệu gọi sử dụng từ task. Một tác vụ handler được khai báo cấu hình y hệt một task, nhưng yêu cầu phải có tên tác vụ rõ ràng để dùng khi triệu gọi.
- notify : là keyword dùng để triệu gọi một hoặc nhiều handler trong một task.
Lưu ý chung:
- Khi notify các tác vụ ‘handler‘ , thì các tác vụ sẽ luôn chạy theo thứ tự từ trên xuống đã được định nghĩa.
- Nếu có hai tác vụ ‘handler’ cùng tên, thì chỉ chạy một cái duy nhất theo thứ tự đầu tiên.
- Không sử dụng [tag] cho tác vụ handler được.
Cấu trúc cơ bản của ‘handler’
--- - hosts: vb ... tasks: ... notify: handlers: ...
1.1 Ví dụ 1
--- - hosts: web tasks: - copy: src: main.conf dest: /etc/nginx/nginx.conf notify: restart nginx handlers: - name: restart nginx service: name=nginx state=restarted
Giải thích:
Khi mà task copy file cấu hình ‘main.conf‘ thay thế file ‘nginx.conf‘ hoàn thành không lỗi. Thì task copy sẽ triệu gọi một tác vụ ‘handler‘, bằng keyword cấu hình ‘notify‘, có tên là ‘restart nginx‘ để tiến hành khởi động lại dịch vụ Nginx.
1.2 Ví dụ 2
Bạn có thể gọi sử dụng nhiều tác vụ handler trong một task.
--- - hosts: web tasks: - copy: src: main.conf dest: /etc/nginx/nginx.conf notify: - restart nginx - stop nginx handlers: - name: restart nginx service: name=nginx state=restarted - name: stop nginx service: name=nginx state=stop
1.3 Ví dụ 3
--- - hosts: all tasks: - name: create a hello world textfile copy: content: "Hello World!" dest: /tmp/hello.txt owner: root group: root mode: 0640 notify: - redhat handler - debian handler sudo: yes handlers: - name: redhat handler debug: msg='redhat' when: ansible_distribution == "RedHat" - name: debian handler debug: msg='debian' when: ansible_distribution == "Debian"
Bạn có thể kết hợp với xử lý điều kiện ‘when‘ khi cấu hình tác vụ handler như xài với task bình thường.
2. Handler Listen
Từ Ansible version 2.2 trở đi thì Ansible đã hỗ trợ một cấu hình mang tên ‘Handler Listen‘. Với keyword ‘listen‘ sử dụng khi cấu hình một tác vụ ‘handler‘, ta có thể hiểu nó giống như việc gom nhóm các tác vụ ‘handler‘ thành một group theo tên ‘listen‘. Và bạn chỉ cần gọi tên của ‘listen‘ được khai báo là có thể chạy toàn bộ các tác vụ ‘handler‘ con của nhóm ‘listen‘ đó.
Ví dụ 4
- hosts: all tasks: - name: configure nginx template: src=nginx.conf.j2 dest=/etc/nginx.conf notify: restart_nginx_cluster handlers: - name: restart_uwsgi service: name=uwsgi state=restarted listen: restart_nginx_cluster - name: restart_nginx service: name=nginx state=restarted listen: restart_nginx_cluster
Giải thích:
- Mình có một playbook đơn giản, là cần copy cấu hình file nginx.conf lên con máy chủ remote. Sau đó cần restart toàn bộ service liên quan webserver nginx. Thì thay vì phải gọi (notify) từng tên tác vụ handler như ở phần đầu, thì giờ mình có thể gọi tên nhóm ‘listen‘ là ‘restart_nginx_cluster‘ tức nhóm các tác vụ ‘handler‘ đã được khai báo và thực thi . Việc khai báo ‘listen‘ này nhìn chung rất gọn gàng nếu bạn có nhiều ‘handler’ cần phải sử dụng cùng lúc.
- Lưu ý là các tác vụ ‘handler‘ trong một nhóm ‘listen‘ vẫn chạy theo thứ tự đã khai báo trong mục danh sách tác vụ ‘handler‘ nhé.
Tổng kết
Vậy là bạn đã hiểu được tác vụ Handler Ansible là gì ? sử dụng như thế nào bằng ‘notify’ và Handler Listen cấu hình ra sao trên Ansible rồi nhé. Chúc các bạn thực hành thành công.
Nguồn: https://cuongquach.com