Cài Đặt và Lệnh Ad-hoc Đầu Tiên
Bài này dựng môi trường thực hành và chạy những lệnh Ansible đầu tiên. Hết bài bạn sẽ điều khiển được một máy chủ từ xa bằng các lệnh ad-hoc — chạy nhanh một module, chưa cần viết playbook.
Code hands-on của series ở github.com/nghiadaulau/ansible-series. Clone về để chạy theo.
Cài Ansible (control node)
Ansible chỉ cần cài ở một máy điều khiển (nhớ Bài 1 — agentless). Cài bằng pip (cách phổ biến nhất, luôn có bản mới):
pip install ansible # bản đầy đủ (kèm collections)
# hoặc gọn hơn: pip install ansible-core
ansible --version # kiểm tra
ansible [core 2.19.x]
python version = 3.11...
(Cách khác: brew install ansible trên macOS, hoặc trình quản lý gói của distro — nhớ series Linux Bài 11. Windows thì cài trong WSL vì Ansible không chạy native trên Windows.)
Chuẩn bị host để quản lý
Ta cần một máy đích. Bài này dùng một EC2 Amazon Linux (nhớ series AWS Bài 2 cách tạo) — nhưng bất kỳ máy Linux nào bạn SSH được đều dùng được. Yêu cầu của host (Bài 1): SSH vào được + có Python (Amazon Linux 2023 có sẵn python3).
Cần trong tay: địa chỉ IP công khai của host, user đăng nhập (ec2-user với Amazon Linux), và khóa SSH (file .pem). Nhớ siết Security Group chỉ mở SSH cho IP của bạn (series AWS Bài 3).
Cấu hình: ansible.cfg và inventory
Tạo một thư mục dự án, rồi hai file.
ansible.cfg — cấu hình mặc định cho thư mục này:
[defaults]
inventory = inventory.ini
host_key_checking = False
remote_user = ec2-user
private_key_file = ansible-lab.pem
interpreter_python = /usr/bin/python3
inventory.ini — danh sách host (Bài 3 sẽ đào sâu):
[web]
lab ansible_host=203.0.113.10
Ở đây lab là tên gợi nhớ cho host, [web] là một nhóm. host_key_checking = False tiện cho lab (bỏ hỏi xác nhận host key). Đừng commit file .pem lên Git — thêm nó vào .gitignore.
Lệnh ad-hoc: chạy nhanh một module
Lệnh ad-hoc có cấu trúc:
ansible <pattern> -m <module> -a "<tham số>"
└───┬───┘ └────┬───┘ └─────┬──────┘
host/nhóm module tham số
<pattern> là host/nhóm áp lên (all, web, lab...). Đây là cách thử nhanh một thao tác mà không cần playbook.
ping: kiểm tra kết nối
ansible all -m ping
lab | SUCCESS => {
"changed": false,
"ping": "pong"
}
pong nghĩa là Ansible SSH vào được, có Python, chạy module thành công (đúng vòng đời ở Bài 1). "changed": false vì ping không thay đổi gì — lưu ý trường changed này, nó là tinh thần idempotency (Bài 5).
Lưu ý: module
pingcủa Ansible không phải lệnhpingICMP. Nó kiểm tra "SSH + Python + module chạy được" — tức kiểm tra Ansible quản lý được host.
command và shell: chạy lệnh
ansible all -m command -a "uptime"
lab | CHANGED | rc=0 >>
10:16:19 up 3 min, 1 user, load average: 0.29, 0.12
command là module mặc định (gõ ansible all -a "uptime" cũng được). Nhưng command không hỗ trợ pipe, redirect, biến shell. Khi cần những thứ đó, dùng shell:
ansible all -m shell -a "cat /etc/os-release | grep PRETTY_NAME"
lab | CHANGED | rc=0 >>
PRETTY_NAME="Amazon Linux 2023..."
Quy tắc: ưu tiên
command(an toàn hơn, không qua shell); chỉ dùngshellkhi cần pipe/redirect. Và tốt hơn nữa: dùng module chuyên dụng (apt, copy, service...) thay vì command/shell bất cứ khi nào có — vì chúng idempotent, còncommand/shellluôn báoCHANGED(Ansible không biết lệnh tùy ý có đổi gì không).
become: chạy với quyền root
Nhiều việc cần sudo (nhớ series Linux Bài 12). Thêm -b (become):
ansible all -b -m command -a "whoami"
lab | CHANGED | rc=0 >>
root
-b nâng quyền lên root (qua sudo) để chạy. Bạn sẽ dùng become cho gần như mọi việc quản trị (cài gói, sửa file hệ thống).
setup: thu thập facts
Module setup thu thập facts — thông tin về host (OS, IP, RAM, CPU...):
ansible all -m setup -a "filter=ansible_distribution*"
"ansible_distribution": "Amazon",
"ansible_distribution_version": "2023",
Facts cực hữu ích: bạn viết task tùy theo OS, phiên bản... Ta đào sâu facts ở Bài 6.
Khi nào dùng ad-hoc, khi nào playbook
Ad-hoc hợp cho việc một lần, nhanh: kiểm tra trạng thái, khởi động lại một dịch vụ trên nhiều máy, xem facts. Còn việc lặp lại, nhiều bước, cần lưu lại thì viết playbook (Bài 4) — đó mới là sức mạnh thật của Ansible.
🧹 Lưu ý
EC2 lab giữ lại xuyên suốt series để thực hành; ta terminate ở Bài 16. Nếu muốn dừng giữa chừng, nhớ terminate để khỏi tốn tiền (series AWS Bài 2).
Tổng kết
Cài Ansible ở control node (pip/brew/package), chuẩn bị một host SSH được + có Python, rồi khai báo trong ansible.cfg và inventory.ini. Lệnh ad-hoc (ansible <pattern> -m <module> -a "<args>") chạy nhanh một module: ping (kiểm tra quản lý được host), command/shell (chạy lệnh — ưu tiên command), -b/become (quyền root), setup (facts). Ưu tiên module chuyên dụng vì chúng idempotent. Ad-hoc cho việc một lần; việc lặp lại thì dùng playbook.
Trước khi viết playbook, ta cần hiểu rõ inventory — Ansible biết quản lý máy nào và nhóm chúng ra sao. Đó là Bài 3.