Ansible Playbook là gì? Cấu trúc và cách viết chuẩn – Bài 4

Trong bài này viết này, chúng ta sẽ cùng tìm hiểu ansible playbook là gì? Một trong những phần quan trọng của Ansible. Đây chính là nơi ta “lập trình” cho Ansible biết phải làm gì với server của mình.

Xem thêm:

Ansible là gì? Vì sao chúng ta lại cần nó – Bài 1

Làm quen với YAML – Bài 2

Ansible Inventory – Bài 3

1. Ansible Playbook là gì?

Hiểu đơn giản, Ansible Playbook là một file định nghĩa những gì Ansible sẽ thực thi trên server. Tức là thay vì ngồi gõ lệnh thủ công, ta sẽ viết sẵn một file Playbook để Ansible tự động thực hiện giúp ta.

Khác với file inventory (có thể là ini hoặc yaml), Playbook chỉ có một định dạng duy nhất là YAML.

2. Cấu trúc cơ bản của một Playbook

Playbook gồm 2 thành phần chính:

  • Play: Là nơi định nghĩa các nhóm server sẽ được áp dụng hành động.
  • Task: Là từng hành động cụ thể được thực thi (như cài package, chạy lệnh, khởi động service…).

Một Playbook có thể chứa nhiều “play”, và mỗi “play” lại chứa nhiều “task”. Cách viết như sau:

- name: Install Apache Server
  hosts: web
  become: yes
  tasks:
    - name: Update system
      apt:
        update_cache: yes

    - name: Install apache2
      apt:
        name: apache2
        state: present

Giải thích:

  • - là dấu hiệu bắt đầu một “play”.
  • Trong “play” có phần hosts (nhóm máy sẽ áp dụng), become: yes (chạy với quyền sudo), và danh sách tasks.
  • Mỗi task gọi một module (ví dụ: apt, service), và kèm theo các tham số tương ứng.

3. Playbook keywords

Trong Playbook, ta sử dụng một số từ khóa đặc biệt để cấu hình hành vi của Ansible, gọi là playbook keywords, ví dụ:

  • name, hosts, become, vars, handlers
  • Trong mỗi task: name, module, args

Những từ khóa này có quy tắc indent (thụt lề) rất quan trọng. Ví dụ hosts, become, tasks phải nằm cùng cấp. Nếu sai indent, Playbook sẽ lỗi ngay lập tức!

4. Một vài lưu ý quan trọng khi viết Playbook

Đây là phần cực kỳ quan trọng nếu bạn không muốn bị lỗi vặt

  • Phải viết đúng format YAML: indent bằng space, không dùng tab.
  • Dữ liệu dạng list thì dùng -, dạng dictionary thì dùng key: value.
  • Thứ tự các task quan trọng — Ansible sẽ chạy từ trên xuống dưới.
  • Trước khi chạy Playbook, đảm bảo inventory file đã được định nghĩa đúng.

5. Cách chạy một Playbook

Sau khi viết xong, bạn chạy bằng lệnh:

ansible-playbook -i inventory.ini playbook.yaml

Trong đó:

  • -i chỉ ra file inventory.
  • Bạn có thể thêm -v, -vv, -vvv, -vvvv để xem log chi tiết hơn.
  • Hoặc dùng --check để chạy ở chế độ kiểm tra trước khi thực thi thật.

6. Ví dụ

Giả sử bạn cần cài MySQL trên Ubuntu 22.04. Đây là các bước thủ công:

  1. apt update
  2. apt upgrade
  3. apt install mysql-server
  4. systemctl enable mysql
  5. systemctl start mysql

Thì tương ứng trong Ansible Playbook sẽ như sau:

- name: Install MySQL server
  hosts: db
  become: yes
  tasks:
    - name: Update apt
      apt:
        update_cache: yes

    - name: Upgrade OS
      apt:
        upgrade: dist

    - name: Install mysql-server
      apt:
        name: mysql-server
        state: present

    - name: Enable MySQL service
      service:
        name: mysql
        enabled: yes
        state: started

Chỉ cần viết Playbook, sau đó chạy ansible-playbook là xong. Không cần gõ từng dòng lệnh thủ công nữa. Cảm ơn bạn đã tham khảo ansible tutorial trên ttnguyen.net

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em