Ad-Hoc: Thực thi lệnh tức thời với Ansible
Trong quản trị hệ thống, đôi khi cần thực hiện các tác vụ nhanh chóng trên nhiều máy chủ mà không cần xây dựng kịch bản phức tạp. Ansible cung cấp công cụ Ad-Hoc để giải quyết yêu cầu này — cho phép chạy một lệnh đơn lẻ hoặc sử dụng một module cụ thể lên tập hợp máy chủ được chỉ định.
Sử dụng Ad-Hoc trong thực tế
Từ "Ad-Hoc" bắt nguồn từ tiếng Latin, mang nghĩa "cho mục đích cụ thể". Trong ngữ cảnh Ansible, đây là cách tiếp cận lý tưởng để xử lý các nhiệm vụ như kiểm tra trạng thái máy chủ, sao chép file tạm thời, hoặc khởi động lại dịch vụ trên nhóm thiết bị.
Cú pháp cơ bản
Lệnh Ad-Hoc được thực hiện thông qua binary ansible, cú pháp chuẩn:
ansible <mẫu_host> [tùy_chọn]
Một số tùy chọn phổ biến:
-i: Chỉ định đường dẫn đến file inventory (mặc định:/etc/ansible/hosts)-f N: Số lượng tiến trình song song (mặc định: 5)-m: Chọn module để thực thi (ví dụ:ping,command,copy)-a 'args': Truyền tham số cho module--private-key: Dùng khóa SSH riêng tư xác thực-u: Chỉ định người dùng đăng nhập vào máy đích-k: Yêu cầu nhập mật khẩu SSH--list-hosts: Liệt kê danh sách máy chủ khớp điều kiện, không thực thi lệnh-B: Chạy lệnh nền, dừng sau số giây nhất định-P: Kiểm tra tiến độ của tác vụ chạy nền-T: Thời gian chờ tối đa khi kết nối đến máy chủ-o: Hiển thị đầu ra gọn trên một dòng
Ví dụ minh họa
Kiểm tra kết nối đến nhóm máy Linux
Dùng module ping để xác minh khả năng truy cập và hoạt động của Python trên các host:
ansible linux -m ping
Kết quả trả về:
192.168.158.16 | SUCCESS => {
"changed": false,
"ping": "pong",
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
}
}
...
Giá trị "changed": false cho biết không có thay đổi nào được áp dụng; "ping": "pong" xác nhận máy chủ phản hồi thành công.
Hiển thị hostname của tất cả máy trong nhóm linux
Sử dụng module command để chạy lệnh hệ điều hành:
ansible linux -m command -a 'hostname'
Đầu ra mẫu:
192.168.158.16 | CHANGED | rc=0 >>
k8sworker
192.168.158.23 | CHANGED | rc=0 >>
k8smaster
Trạng thái CHANGED xuất hiện vì lệnh đã sinh ra đầu ra mới (khác với trạng thái ban đầu).
Liệt kê các máy chủ thuộc nhóm "linux"
Không thực thi lệnh, chỉ hiển thị danh sách máy:
ansible linux --list-hosts
Kết quả:
hosts (3):
192.168.158.23
192.168.158.16
192.168.158.176
Playbook: Tự động hóa cấu hình bằng YAML
Khi cần thực hiện các tác vụ phức tạp, lặp lại hoặc yêu cầu logic điều kiện, Playbook là lựa chọn phù hợp. Đây là tệp cấu hình viết theo cú pháp YAML, mô tả tuần tự các "plays" (vở diễn), mỗi play gồm nhiều "tasks" (nhiệm vụ) áp dụng lên một nhóm máy chủ nhất định.
Cấu trúc cơ bản của Playbook
- Hosts: Xác định nhóm máy chủ mục tiêu.
- Tasks: Danh sách các bước thực thi, mỗi bước dùng một module của Ansible.
- Vars (tùy chọn): Định nghĩa biến cục bộ hoặc toàn cục.
- Handlers (tùy chọn): Các tác vụ chỉ chạy khi được kích hoạt bởi sự kiện (thường là restart service).
Ví dụ: Triển khai ứng dụng đơn giản
Dưới đây là ví dụ triển khai Node.js cơ bản qua Playbook:
---
- name: Cài đặt Node.js trên các máy chủ web
hosts: webservers
become: yes
tasks:
- name: Cập nhật kho gói trên Ubuntu
apt:
update_cache: yes
when: ansible_os_family == "Debian"
- name: Cài đặt Node.js sử dụng NodeSource repository
shell: |
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
apt-get install -y nodejs
args:
executable: /bin/bash
when: ansible_distribution == "Ubuntu"
- name: Sao chép mã nguồn ứng dụng
copy:
src: /local/app.js
dest: /opt/myapp/app.js
owner: appuser
group: appuser
mode: '0644'
- name: Khởi tạo dịch vụ ứng dụng
systemd:
name: my-node-app
enabled: yes
state: started
daemon_reload: yes
Playbook trên thực hiện các bước: cập nhật hệ thống, cài đặt Node.js, sao chép mã nguồn và kích hoạt dịch vụ. Module when đảm bảo tương thích hệ điều hành.
Tích hợp LAMP tự động
Ansible cũng hỗ trợ triển khai môi trường LAMP (Linux, Apache, MySQL, PHP) một cách đồng bộ:
- Cài đặt
httpdhoặcapache2tùy hệ điều hành - Khởi động dịch vụ và cấu hình tường lửa
- Tạo cơ sở dữ liệu MySQL và người dùng chuyên dụng
- Triển khai script PHP lên thư mục web
Tự động hóa triển khai Tomcat
Việc cài đặt Tomcat có thể bao gồm:
- Tải gói .tar.gz từ kho lưu trữ chính thức
- Giải nén vào thư mục đích
- Cấu hình
server.xmlvàtomcat-users.xml - Tạo service systemd để quản lý vòng đời dịch vụ
Playbook giúp chuẩn hóa quy trình này trên mọi môi trường — phát triển, kiểm thử hay sản xuất.