Trong bài này, mình sẽ giới thiệu một khái niệm rất quan trọng giúp bạn quản lý dự án Ansible một cách chuyên nghiệp – đó là Ansible Role.
Xem thêm:
Ansible Templates – Bài 9
Ansible Handler – Bài 8
1. Ansible Role là gì?
Hiểu đơn giản, Role là cách tổ chức code trong Ansible theo từng phần nhỏ, rõ ràng, có cấu trúc chuẩn hóa.
Thay vì viết hàng chục, hàng trăm dòng trong 1 file playbook duy nhất, với Role bạn sẽ chia nhỏ từng phần ra: task riêng, handler riêng, biến riêng, file riêng…
Ví dụ:
- Role
webserver: chứa logic cài đặt và cấu hình web server - Role
common: chứa các cấu hình dùng chung
2. Tại sao nên dùng Role?
| Lợi ích | Mô tả |
|---|---|
| Dễ quản lý | Tách riêng các phần giúp code rõ ràng, dễ debug |
| Tái sử dụng được | Viết một lần, dùng ở nhiều nơi |
| Chuẩn hóa | Dự án có cấu trúc rõ ràng, dễ bảo trì và mở rộng |
3. Cấu trúc thư mục chuẩn của Role
Khi bạn tạo 1 role bằng lệnh:
ansible-galaxy init webserver
Ansible sẽ tạo sẵn một thư mục webserver với cấu trúc như sau:
webserver/
├── tasks/ # Nơi chứa các tasks chính (main.yml)
├── handlers/ # Nơi chứa các handler
├── files/ # Chứa file sẽ được copy sang máy đích
├── templates/ # Chứa file .j2 (template)
├── vars/ # Khai báo biến
Mỗi thư mục sẽ có 1 file main.yml mà Ansible sẽ tự tìm và chạy.
4. Cách sử dụng Role trong Playbook
- name: Cài Web Server
hosts: web
become: yes
roles:
- webserver
Chỉ cần gọi tên role, Ansible sẽ tự động tìm và thực hiện các file main.yml trong thư mục tasks, vars, handlers, v.v…
5. Ví dụ
Cài đặt nginx bằng Role webserver
tasks/main.yml
- name: Cài nginx
apt:
name: nginx
state: present
notify: Restart nginx
- name: Copy file config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
handlers/main.yml
- name: Restart nginx
service:
name: nginx
state: restarted
vars/main.yml
nginx_port: 80
nginx_server_name: example.com
templates/nginx.conf.j2
server {
listen {{ nginx_port }};
server_name {{ nginx_server_name }};
}
6. Quản lý task phức tạp trong Role
Nếu số lượng task nhiều, bạn có thể chia nhỏ task thành từng file YAML khác nhau và import vào:
# tasks/main.yml
- import_tasks: installNginx.yml
- import_tasks: configureNginx.yml
- import_tasks: copyFiles.yml
Ansible sẽ chạy từng file lần lượt.
Ghi nhớ: .yaml và .yml là như nhau.
7. Nơi lưu Role
- Nếu không khai báo path, Ansible sẽ tìm role trong:
roles/(ngang hàng với playbook)/etc/ansible/roles
- Bạn cũng có thể chỉ định đường dẫn tuyệt đối tới Role
Bài viết cùng chủ đề:
Ansible Modules – Bài 7
Điều kiện và vòng lặp trong Ansible – Bài 6
Ansible Variables – Biến trong Ansible là gì và cách sử dụng – Bài 5