Ansible Ad-Hoc và Playbook: Hướng dẫn thực hành

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 httpd hoặc apache2 tù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.xmltomcat-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.

Thẻ: ansible ad-hoc playbook automation yaml

Đăng vào ngày 22 tháng 6 lúc 20:31