Ansible: Hướng dẫn copy file trên cùng một host với Ansible

Ansible: Hướng dẫn copy file trên cùng một host với Ansible | Trong bài viết này chúng ta sẽ cùng thực hành một nội dung nhỏ với Ansible, đó chính là làm thế nào để copy một file trên cùng một host Linux với hai thư mục khác nhau đây.

Như bạn biết thì Ansible có hỗ trợ module cp (LINK), tiếc thay module này chỉ có tác dụng copy file từ máy chủ Ansible đẩy lên máy chủ host theo kiểu chương trình ‘scp’ ấy. Chứ hoàn toàn không khả dụng cho mục đích copy file di chuyển từ thư mục A sang thư mục B trên cùng 1 host. Vậy phải làm chuyện này như thế nào với Ansible đây?

ansible copy file trên cùng một host

Có thể bạn cũng quan tâm các chủ đề khác
Ebook Ansible for DevOps PDF
Các mẹo giúp tăng tốc độ thực thi của Ansible
Hướng dẫn sử dụng lệnh Ansible Ad-Hoc cơ bản

Giải pháp copy file trên cùng một host với Ansible

Bạn có hai giải pháp để thực hiện chuyện này là :
– Sử dụng module thực hiện lệnh trên host Linux như : command , shell,..
– Sử dụng module ‘synnchronize’ để copy.

1. Sử dụng module ‘shell/command’ để copy file

Cách này coi như là cứu cánh cơ bản nhất khi bạn sẽ thực hiện câu lệnh bạn mong muốn trên máy chủ Host Linux với module Shell (LINK) hoặc Command .

Ví dụ 1.1 : ansible ad-hoc command

# ansible servers -m shell -a “cp /etc/httpd/httpd.conf /tmp/“

Ví dụ 1.2 : ansible playbooks

- name: copy file cau hinh httpd
  shell: cp /etc/httpd/httpd.conf /tmp/

2. Sử dụng module ‘synchronize’ để copy file

Module Ansible ‘synchronize’ (Link) sử dụng chương trình ‘rsync’ nổi tiếng trên máy chủ host Linux để thực hiện sao chép thư mục hay file với nhiều tính năng hỗ trợ như ‘rsync’ thường gặp. Vậy sẽ chẳng có gì bất ngờ với cách sử dụng ‘rsync’ bằng module ‘synchronize’ phải không nào .

Mặc định ‘synchronize’ cũng chỉ copy dữ liệu từ máy chủ Ansible lên máy chủ Linux host, nếu bạn muốn copy sync 2 file hay 2 folder trên cùng một máy chủ Host Linux thì phải lưu ý option “delegate_to” .

Giá trị ‘delegate_to: source-server’ chỉ thông tin nguồn địa chỉ server của file mà ta set giá trị ‘src’, sẽ được sử dụng để copy sync.

Ví dụ 2.1: ansible playbook
– Copy file từ 2 thư mục trên cùng server A.

- hosts: ServerA
  tasks:
    - name: Copy file on same host server A
      synchronize:
        src: /path/on/server_a
        dest: /path/on/server_a
      delegate_to: ServerA

Ví dụ 2.2: ansible playbook
– Copy file từ Server A sang server B.

- hosts: ServerB
  tasks:
    - name: Transfer file from ServerA to ServerB
      synchronize:
        src: /path/on/server_a
        dest: /path/on/server_b
      delegate_to: ServerA

Lưu ý:
– Do module ‘synchronize’ sử dụng chương trình ‘rsync’ sử dụng cơ chế ‘compress’ nén dữ liệu mặc định để truyền dữ liệu tiết kiệm băng thông. Điều này vô hình chung làm chậm quá trình copy file trên cùng một host, vậy khi bạn cần copy file trên cùng một host. Hãy tắt tính năng compress với loại dữ liệu đuôi extension của bạn với option ‘–skip-compress=extension_file.
– Ta có thể Kết hợp nâng cao với giá trị biến ‘inventory_hostname’ đại diện cho thông tin host mà Ansible đang thực thi trong file inventory host.

Ví dụ 2.3: ansible playbook
– Copy file từ 2 thư mục trên cùng server A.

- hosts: ServerA
  tasks:
    - name: Copy file on same host server A
      synchronize:
        src: /root/backup.zip
        dest: /tmp/
        rsync_opts:
           - "--skip-compress=gz/tar/img/zip"
      delegate_to: "{{ inventory_hostname }}"

Vậy là bạn đã biết đã biết cách sử dụng Ansible để copy một file trên cùng một host Linux rồi. Vẫn còn rất nhiều các bài thực hành sử dụng Ansible nữa. Các bạn hãy đón đọc tại Cuongquach.com.

Nguồn: https://cuongquach.com/

Previous articleEbook Ansible for DevOps PDF
Next articleNTP Server là gì ? Tổng quan về dịch vụ NTP (Network Time Protocol) đồng bộ thời gian
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !