Ansible Playbooks
Trong Ansible, Playbook là ngôn ngữ orchestration cốt lõi: nơi bạn mô tả rõ Ansible cần làm gì.
Nó có thể rất đơn giản (chạy vài lệnh tuần tự trên server), hoặc rất lớn (provision hàng trăm VM, cấu hình network, app, monitoring, backup…).
1) Playbook là gì?
- Playbook là một file YAML duy nhất
- Bên trong chứa một danh sách các play
- Mỗi play định nghĩa hoạt động chạy trên một host hoặc một nhóm hosts
playbook.yml
└── list of plays
├── play #1 (name, hosts, tasks)
└── play #2 (name, hosts, tasks)
2) Play, Task, Module: phân biệt nhanh
Play
Một khối logic lớn, thường có:
name: tên playhosts: target host/group từ inventorytasks: danh sách hành động
Task
Task là một action duy nhất chạy trên host, ví dụ:
- chạy command
- chạy script
- cài package
- restart/shutdown service
Module
“Động từ” trong task thực chất là module Ansible, ví dụ:
commandscriptyumservice
3) YAML structure quan trọng hơn bạn nghĩ
Playbook hợp lệ vì đúng YAML structure:
- Playbook là list of dictionaries (mỗi play bắt đầu bằng
-) taskslà ordered list- Thứ tự task ảnh hưởng trực tiếp đến kết quả chạy
Ví dụ: nếu bạn start web service trước khi cài httpd, playbook có thể fail hoặc behavior sai.
Đúng thứ tự:
1) Install package (httpd)
2) Start service (httpd)
Sai thứ tự:
1) Start service
2) Install package
4) hosts lấy từ đâu?
hosts được khai báo ở play level và phải map với inventory.
hosts: localhost→ chạy local để testhosts: web→ chạy trên toàn bộ host thuộc groupweb
Điểm cần nhớ:
- Host/group trong playbook phải tồn tại trong inventory
- Connection info (SSH user, key, port…) được lấy từ inventory/vars
inventory
├── localhost
├── [mail]
│ ├── server3.company.com
│ └── server4.company.com
└── [web]
├── server7.company.com
└── server8.company.com
5) Ví dụ playbook tối giản
- name: Play 1
hosts: localhost
tasks:
- name: Execute command date
command: date
- name: Execute script on server
script: test_script.sh
- name: Install httpd service
yum:
name: httpd
state: present
- name: Start web server
service:
name: httpd
state: started
Nếu tách thành nhiều play trong cùng file YAML, Ansible sẽ chạy từng play theo thứ tự khai báo.
6) Chạy playbook như thế nào?
Dùng lệnh:
ansible-playbook <playbook.yml>
Để xem thêm options:
ansible-playbook --help
Bạn cũng có thể tra modules sẵn có bằng:
ansible-doc -l
Kết luận
Khi mới học Ansible Playbooks, có 3 điểm mấu chốt:
- Nắm đúng YAML structure (indentation + list/dictionary)
- Hiểu
hostsở play level và liên hệ với inventory - Nhớ rằng
taskslà danh sách có thứ tự, nên workflow đúng/sai nằm ở chính thứ tự này
Nếu làm chắc 3 điểm trên, bạn đã có nền tảng tốt để viết playbook ổn định trước khi đi sâu vào roles, variables, conditionals và handlers.