Ansible: Tìm hiểu cấu hình Handler trong Ansible Playbook

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ấu hình handler 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

Previous articleJenkins: Hướng dẫn backup và restore dữ liệu Jenkins
Next articleEbook Web Design with HTML5 & CSS3 Comprehensive 8th Edition PDF
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !