Trong bài viết này, chúng ta sẽ tìm hiểu biến (variables). Biến giúp chúng ta lưu trữ dữ liệu để tái sử dụng trong các playbook, roles hay task, giúp code gọn gàng, linh hoạt và dễ bảo trì hơn rất nhiều
Xem thêm:
Ansible Inventory – Bài 3
ansible playbook là gì? Cấu trúc và cách viết chuẩn – Bài 4
1. Biến là gì?
Hiểu đơn giản, biến là nơi lưu trữ giá trị (như tên server, cổng kết nối, danh sách packages cần cài, v.v…). Khi cần, ta chỉ việc gọi lại tên biến thay vì phải viết lại giá trị đó nhiều lần.
Ví dụ:
http_port: 80
Sau đó, khi cần sử dụng http_port, chỉ cần gọi:
"{{ http_port }}"
2. Quy tắc đặt tên biến trong Ansible
Khi đặt tên biến, nhớ tuân thủ các quy tắc sau:
- Chỉ dùng chữ cái, số và dấu gạch dưới (_)
- Không được bắt đầu bằng số
- Không được trùng với từ khóa của Python hoặc từ khóa trong Playbook (như
name,hosts,tasks) để tránh xung đột
3. Có mấy cách biểu diễn biến?
Ansible hỗ trợ 3 dạng biến chính:
Biến đơn (Key – Value)
my_var: "Hello Ansible"
Sử dụng:
"{{ my_var }}"
Biến dạng danh sách (List)
packages:
- nginx
- apache2
- mysql
Sử dụng:
"{{ packages[0] }}" # kết quả là nginx
Biến dạng dictionary (Từ điển)
firewall:
port: 80
rule: allow
Sử dụng:
"{{ firewall.rule }}" # kết quả là allow
4. Khai báo biến ở đâu?
Bạn có thể định nghĩa biến ở 4 nơi khác nhau:
| Nơi khai báo | Ghi chú |
|---|---|
| Inventory | Biến dùng chung theo host hoặc nhóm |
| Playbook | Biến dùng trong một play |
File riêng (vars_files) |
Quản lý biến riêng biệt, dễ bảo trì |
| Runtime | Truyền vào khi chạy bằng --extra-vars |
5. Độ ưu tiên của biến – Biến nào sẽ được dùng?
Trong Ansible, biến được ưu tiên theo thứ tự từ thấp đến cao:
- Biến trong inventory
- Biến trong playbook
- Biến trong vars_files
- Biến truyền vào lúc chạy (runtime)
6. register – Biến lưu kết quả sau khi chạy task
Đây là một dạng biến đặc biệt dùng để lưu kết quả của một task.
Ví dụ:
- name: Check OS version
command: cat /etc/os-release
register: OS_version
Sau đó bạn có thể sử dụng:
- debug:
var: OS_version.stdout_lines
7. Special Variables – Biến đặc biệt của Ansible
Ngoài biến bạn tự định nghĩa, Ansible còn cung cấp sẵn một số biến hệ thống rất hữu ích:
Facts
Tự động thu thập thông tin hệ thống từ host: IP, hostname, RAM, CPU, OS, v.v…
ansible_facts.default_ipv4.address
Mặc định, gather_facts: true sẽ tự động bật để lấy thông tin này.
Magic Variables
Cung cấp thông tin về playbook, host hiện tại, lỗi, nhóm, v.v…
Một số magic variables thường dùng:
hostvars– Truy cập biến của một host khácgroups– Danh sách các nhómgroup_names– Nhóm mà host hiện tại thuộc vềinventory_hostname– Tên host trong inventory
Connection Variables
Dùng để cấu hình cách Ansible kết nối đến host:
ansible_host=192.168.1.10
ansible_user=ubuntu
ansible_connection=ssh
Biến trong Ansible giúp bạn viết code gọn gàng, dễ đọc, dễ bảo trì. Cảm ơn bạn đã tham khảo ansible tutorial trên ttnguyen.net
Bài viết cùng chủ đề:
Ansible là gì? Vì sao chúng ta lại cần nó – Bài 1