Ansible Variables – Biến trong Ansible là gì và cách sử dụng – Bài 5

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:

  1. Biến trong inventory
  2. Biến trong playbook
  3. Biến trong vars_files
  4. 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ác
  • groups – Danh sách các nhóm
  • group_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

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

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