Introduction to Ansible Configuration Files
Trong bài này, mục tiêu là nắm 3 ý quan trọng:
- Ansible config nằm ở đâu và chứa gì
- Cách override config theo từng use case
- Thứ tự ưu tiên khi có nhiều nguồn config cùng tồn tại
1) ansible.cfg là gì?
Khi cài Ansible, file mặc định thường nằm ở:
/etc/ansible/ansible.cfg
File này điều khiển default behavior của Ansible.
Một số section thường gặp:
[defaults][inventory][privilege_escalation][ssh_connection][colors]
Ví dụ các tham số hay dùng:
inventory: đường dẫn inventory mặc địnhlog_path: nơi ghi logroles_path,library: nơi tìm role/modulegathering: có gather facts mặc định hay khôngtimeout: timeout SSHforks: số host chạy song song
2) Override config khi mỗi nhóm playbook cần behavior khác nhau
Giả sử bạn có 3 cụm playbook:
- web
- database
- network
Mỗi cụm muốn config khác nhau (ví dụ gather facts on/off, màu output, timeout SSH…).
Cách làm phổ biến:
- Copy
ansible.cfgvào từng thư mục playbook - Sửa đúng các tham số cần thay đổi
- Chạy playbook từ thư mục đó
/opt/web-playbooks/ansible.cfg -> config cho web
/opt/db-playbooks/ansible.cfg -> config cho db
/opt/network-playbooks/ansible.cfg -> config cho network
3) Dùng file config ở vị trí bất kỳ với ANSIBLE_CONFIG
Nếu bạn muốn dùng một file config riêng ngoài thư mục playbook (ví dụ /opt/ansible-web.cfg), có thể set biến môi trường:
ANSIBLE_CONFIG=/opt/ansible-web.cfg ansible-playbook site.yml
Điểm hay: file này có thể tái sử dụng cho nhiều repo/playbook khác nhau.
4) Thứ tự ưu tiên config (rất quan trọng)
Khi nhiều file/nguồn cùng tồn tại, Ansible ưu tiên theo thứ tự:
1) ENV: ANSIBLE_CONFIG=<path>
2) ./ansible.cfg (current directory)
3) ~/.ansible.cfg
4) /etc/ansible/ansible.cfg
Nguồn ở trên sẽ override nguồn ở dưới.
Lưu ý: bạn không cần copy toàn bộ tham số. Chỉ cần đặt tham số muốn override; phần còn lại sẽ lấy theo chain mặc định.
5) Override từng tham số bằng environment variable
Nếu chỉ muốn đổi 1 giá trị tạm thời (ví dụ gathering), không cần tạo file mới.
Thông thường map theo rule:
<parameter> -> ANSIBLE_<PARAMETER_UPPERCASE>
Ví dụ:
gathering -> ANSIBLE_GATHERING
Chạy một lệnh duy nhất:
ANSIBLE_GATHERING=explicit ansible-playbook deploy.yml
Hoặc set cho cả shell session:
export ANSIBLE_GATHERING=explicit
ansible-playbook deploy.yml
6) 3 lệnh debug config nên thuộc lòng
ansible-config list
Liệt kê toàn bộ options + default value + mô tả.
ansible-config view
Cho biết file config active hiện tại.
ansible-config dump
In ra effective settings Ansible đang dùng và nguồn lấy giá trị.
Ví dụ kiểm tra gathering:
export ANSIBLE_GATHERING=explicit
ansible-config dump | grep GATHERING
Nếu output chỉ ra value đến từ env var, nghĩa là env đang có ưu tiên cao nhất.
7) Chọn cách nào cho đúng ngữ cảnh?
- Đổi tạm cho 1 command: dùng
KEY=value ansible-playbook ... - Đổi trong cả phiên shell: dùng
export - Chuẩn hóa cho team/repo: tạo
ansible.cfglocal và commit cùng playbooks
Single command -> quick test
Shell session -> short-term work
Repo ansible.cfg-> long-term, team-friendly
Kết luận
ansible.cfg không chỉ là file cấu hình mặc định, mà là “control plane” cho cách Ansible vận hành.
Khi hiểu rõ:
- vị trí file,
- thứ tự ưu tiên,
- cách override bằng ENV,
- và cách verify bằng
ansible-config dump,
bạn sẽ debug nhanh hơn rất nhiều và tránh lỗi “sao chạy khác kỳ vọng”.
Ở section tiếp theo, chúng ta sẽ đi sâu hơn vào inventory để quản lý target host theo nhóm rõ ràng hơn.