Trong bài viết này, chúng ta sẽ cùng tìm hiểu về Ansible Inventory – một phần cực kỳ quan trọng giúp Ansible biết được nó cần cấu hình những máy nào.
Xem thêm:
Ansible là gì? Vì sao chúng ta lại cần nó – Bài 1
1. Inventory là gì?
Inventory là một file chứa danh sách các máy chủ (host) mà Ansible sẽ kết nối và cấu hình. Trong file này, ta khai báo:
- Địa chỉ IP hoặc domain của máy chủ
- Tên đăng nhập
- Mật khẩu hoặc public key để đăng nhập
- Các thông tin khác như port, phương thức kết nối,…
Đây là cách để ta “nói” cho Ansible biết: “Ê, tao muốn mày cấu hình mấy cái máy này nè, dùng thông tin đăng nhập này nha!”
2. Tại sao cần Inventory?
Ansible là một công cụ agentless, tức là bạn không cần cài gì thêm trên máy chủ cần cấu hình. Chỉ cần SSH hoặc WinRM là Ansible có thể “bắt chuyện” với máy đó được rồi. Mọi thông tin kết nối được mô tả trong file Inventory.
3. Các định dạng Inventory trong Ansible
Ansible hỗ trợ 2 định dạng cho file inventory:
| Định dạng | Ưu điểm | Phù hợp |
|---|---|---|
| INI | Gọn nhẹ, dễ viết | Dự án nhỏ hoặc dùng cá nhân |
| YAML | Cấu trúc rõ ràng, chi tiết | Dự án lớn, nhiều tầng |
Ví dụ định dạng INI:
[web]
192.168.1.5 ansible_user=ubuntu ansible_ssh_pass=123456
[db]
192.168.1.6 ansible_user=ubuntu ansible_ssh_pass=123456
Còn YAML thì rõ ràng hơn nhưng dài hơn:
all:
children:
web:
hosts:
web1:
ansible_host: 192.168.1.5
ansible_user: ubuntu
db:
hosts:
db1:
ansible_host: 192.168.1.6
ansible_user: ubuntu
4. Các parameter phổ biến trong Inventory
Dưới đây là 6 tham số bạn sẽ dùng nhiều khi khai báo host:
| Tham số | Ý nghĩa |
|---|---|
ansible_host |
Địa chỉ IP hoặc tên máy chủ |
ansible_user |
Tên đăng nhập SSH |
ansible_ssh_pass |
Mật khẩu đăng nhập SSH |
ansible_port |
Port SSH (thường là 22 cho Linux, 5985 cho Windows) |
ansible_connection |
Phương thức kết nối (ssh, winrm, local) |
ansible_become |
Dùng sudo để chạy lệnh (true/false) |
5. Thực hành viết Inventory
5.1. Cấu trúc thư mục
ansible-lab/ ├── inventories/ │ ├── inventory.ini │ └── inventory.yaml ├── playbooks/ │ └── install_webserver.yaml ├── roles/ ├── group_vars/ ├── host_vars/ └── ansible.cfg
5.2. Viết file inventory.ini
[server]
192.168.1.5 ansible_user=ubuntu ansible_ssh_pass=123456
192.168.1.6 ansible_user=ubuntu ansible_ssh_pass=123456
Bạn có thể đặt tên riêng để dễ dùng:
[server]
web1 ansible_host=192.168.1.5 ansible_user=ubuntu
db ansible_host=192.168.1.6 ansible_user=ubuntu
Tạo nhóm con và nhóm cha:
[web]
web1 ansible_host=192.168.1.5 ansible_user=ubuntu
[db]
db ansible_host=192.168.1.6 ansible_user=ubuntu
[server:children]
web
db
Chạy lệnh kiểm tra:
ansible all -i inventories/inventory.ini -m ping
Nếu gặp lỗi fingerprint, chỉ cần SSH vào máy đó 1 lần để xác nhận:
ssh ubuntu@192.168.1.5
Chọn “yes” là xong.
Ngoài ra, bạn có thể tạo key:
ssh-keygen -t rsa
Copy key qua máy đích:
ssh-copy-id ubuntu@192.168.1.6
Lúc này bạn có thể bỏ qua ansible_ssh_pass trong inventory.
5.3. Viết Inventory bằng YAML
all:
children:
web:
hosts:
web1:
ansible_host: 192.168.1.5
ansible_user: ubuntu
db:
hosts:
db1:
ansible_host: 192.168.1.6
ansible_user: ubuntu
server:
children:
- web
- db
Chạy:
ansible server -i inventories/inventory.ini -m ping
Cảm ơn bạn đã tham khảo ansible tutorial trên ttnguyen.net