Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách quản lý tệp bằng các mô-đun ansible. Bạn sẽ học cách sao chép, chỉnh sửa, chèn, tải xuống và thay thế tệp bằng Ansible.
Chúng ta sẽ làm gì?
- Sao chép tệp bằng mô-đun ‘copy’ và ‘templates’
- Tải xuống tệp bằng mô-đun ‘fetch’
- Chỉnh sửa tệp bằng các mô-đun ‘blockinfile’, ‘lineinfile’, và ‘replace’
- Quản lý thuộc tính tập tin
Sao chép tệp bằng mô-đun ‘copy’ và ‘templates’ trong Ansible

Ansible cung cấp một số mô-đun để sao chép tệp từ thư mục cục bộ sang các máy mục tiêu từ xa, đó là mô-đun ‘copy’ và ‘template’.
Sự khác biệt giữa mô-đun ‘copy’ và ‘template’ là mô-đun sao chép sẽ sao chép tệp từ thư mục ‘files’ và ‘template’ sẽ sao chép mẫu Jinja2 từ thư mục ‘template’ trên Playbook Ansible.
Mô-đun ‘copy’ phù hợp để sao chép tệp liên tục như chứng chỉ, trong khi ‘template’ hữu ích hơn cho các cấu hình có thể sử dụng lại như cấu hình máy chủ ảo, v.v.
1. Sao chép tệp từ Máy cục bộ sang Máy mục tiêu từ xa
Sao chép cấu hình ‘sources.list’ trên thư mục ‘files’ cục bộ sang máy từ xa ‘/etc/apt/sources.list’. Khi có cấu hình sẽ được thay thế và sao lưu dựa trên dấu thời gian.
- name: Copy from Local to Remote Target Machine with 'copy'
copy:
src: sources.list
dest: /etc/apt/sources.list
backup: yes2. Sao chép tệp trên máy từ xa sang thư mục khác
Sao chép cấu hình sudoers ‘/etc/sudoers.d/hakase’ trên máy từ xa sang thư mục khác ‘/home/hakase/hakase-suoers.txt’. Việc này có thể được thực hiện bằng tùy chọn ‘remote_src’.
- name: Copy file from one directory to other on the Remote Machine
copy:
src: /etc/sudoers.d/hakase
dest: /home/hakase/hakase-sudoers.txt
remote_src: yes3. Sao chép tệp và thay đổi quyền và chủ sở hữu tệp
Sao chép tệp bash trên thư mục ‘files’ vào máy chủ từ xa và đặt quyền mặc định cho tệp là ‘0755’ và chủ sở hữu tệp là ‘hakase’.
- name: Copy file and set up the permission and owner of the file
copy:
src: simple.sh
dest: /home/hakase/simple.sh
owner: hakase
group: hakase
mode: 07554. Sao chép file bằng mô-đun Mẫu
Sao chép cấu hình mẫu Jinja2 cho máy chủ ảo nginx từ thư mục ‘templates’ sang thư mục ‘/etc/sites-enabled/’ trên máy từ xa. Với mẫu Jinja2, chúng ta có thể tạo các biến cho cấu hình của mình và làm cho nó dễ sử dụng hơn.
- name: Copy file using 'template' module
template:
src: default.j2
dest: /etc/nginx/sites-enabled/
backup: yes
owner: root
group: root
mode: 0644Tải xuống tệp bằng Mô-đun tìm nạp trong Ansible
Để tải tệp từ máy từ xa xuống nút ansible cục bộ, chúng ta có thể sử dụng mô-đun ansible có tên là ‘fetch’.
1. Tải từ máy từ xa về máy cục bộ
Tải xuống tệp cấu hình nginx ‘nginx.conf’ từ máy chủ từ xa về thư mục nút ansible cục bộ ‘/home/hakase/backup’ để tạo bản sao lưu. Và mô-đun fetch mặc định sẽ bao gồm các cấu trúc thư mục.
- name: Download file from Remote Machine to Local ansible-node directory
become: yes
fetch:
src: /etc/nginx/nginx.conf
dest: /home/hakase/backup/2. Tải từ Remote về Local không cần cấu trúc thư mục
Tải xuống từ Máy từ xa về nút ansible cục bộ không có cấu trúc thư mục bằng cách thêm tùy chọn ‘flat’.
- name: Download file from Remote Machine to Local ansible node without directory structures
become: yes
fetch:
src: /etc/nginx/nginx.conf
dest: /home/hakase/backup/
flat: yesChỉnh sửa tệp bằng Ansible
Bây giờ chúng ta sẽ chỉnh sửa tệp bằng mô-đun Ansible. Có một số mô-đun mà bạn phải biết để chỉnh sửa tệp bằng Ansible, chẳng hạn như blockinfile, lineinfile và thay thế.
Blockinfile sẽ chèn/xóa nhiều dòng vào tệp. Lineinfile dành cho một dòng và mô-đun thay thế có thể được sử dụng để thay thế chuỗi.
1. Chèn nhiều dòng vào tệp bằng ‘blockinfile’
Thêm cấu hình nhiều dòng vào cấu hình ssh ‘sshd_config’ bằng mô-đun ‘blockinfile’. Và thiết lập mặc định sẽ chèn cấu hình mới vào cuối dòng.
- name: Insert multiple lines and Backup
blockinfile:
path: /etc/ssh/sshd_config
backup: yes
block: |
ClientAliveInterval 360
ClientAliveCountMax 02. Chèn nhiều dòng bằng tùy chọn đánh dấu
Hoặc nếu bạn muốn chèn vào dòng cụ thể, bạn có thể sử dụng tùy chọn điểm đánh dấu và theo sau là ‘insertafter’ hoặc ‘insertBefore’ và Regex hoặc bạn có thể sử dụng cả hai.
Playbook bên dưới sẽ chèn cấu hình bổ sung mới vào tệp ‘sshd_config’. Cấu hình bổ sung sẽ được thêm vào trước dòng ‘UserPAM’ bao quanh bởi điểm đánh dấu mặc định ‘#BEGIN ANSIBLE MANAGED BLOCK’.
- name: Insert after regex, backup, and validate
blockinfile:
path: /etc/ssh/sshd_config
backup: yes
marker: "# {mark} ANSIBLE MANAGED BLOCK "
insertbefore: '^UsePAM '
block: |
AllowUsers hakase vagrant
PermitEmptyPasswords no
PermitRootLogin no
validate: '/usr/sbin/sshd -T -f %s'3. Xóa/Xóa Nhiều dòng chặn xung quanh bên trong điểm đánh dấu
Xóa khối các dòng xung quanh bằng điểm đánh dấu ansible ‘# BEGIN ANSIBLE MANAGED BLOCK’.
- name: Remote text block surrounding by markers
blockinfile:
path: /etc/ssh/sshd_config
marker: "# {mark} ANSIBLE MANAGED BLOCK"
content: ""
backup: yes4. Chèn một dòng mới vào tập tin
Chèn cấu hình dòng mới ‘PasswordAuthentication no’ dưới dòng biểu thức chính quy ‘#PermitEmptyPasswords’ vào cấu hình ssh ‘/etc/ssh/sshd_config’.
- name: Insert New Line under the Regex configuration
lineinfile:
path: /etc/ssh/sshd_config
backup: yes
regexp: '^PasswordAuthentication '
insertafter: '^#PermitEmptyPasswords '
line: 'PasswordAuthentication no'
validate: '/usr/sbin/sshd -T -f %s'5. Xóa Dòng khỏi tệp bằng mô-đun lineinfile
Để xóa/xóa một dòng khỏi tệp, bạn có thể sử dụng tùy chọn ‘state: absent’ và làm theo Biểu thức chính quy của dòng như bên dưới.
- name: Remove a line from the file
lineinfile:
path: /etc/ssh/sshd_config
state: absent
regexp: '^PasswordAuthentication'6. Thay thế chuỗi mẫu bằng biểu thức chính quy và thay thế mô-đun
Bây giờ chúng ta sẽ thay thế một chuỗi bằng mô-đun ‘replace’. Mô-đun thay thế yêu cầu biểu thức chính quy làm tham chiếu phụ trợ để thay thế loại chuỗi.
Thay đổi tên của máy chủ trên tệp ‘/etc/hosts’ bằng cách thay thế mô-đun.
- name: Replace the default
replace:
path: /etc/hosts
regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
replace: '\1box.hakase.labs\2'
backup: yes7. Cấu hình không ghi chú
Mô-đun thay thế có thể được sử dụng để bỏ ghi chú cấu hình trên hệ thống Linux. Đơn giản, chúng ta có thể xóa chuỗi nhận xét ‘#’ ở đầu dòng bằng mô-đun thay thế.
Bỏ ghi chú cấu hình dòng ‘server_tokens’ trên tệp ‘/etc/nginx/nginx.conf’.
- name: Uncomment configuration
replace:
path: /etc/nginx/nginx.conf
regexp: '#(\s+)server_tokens'
replace: 'server_tokens'
backup: yes8. Bình Luận Dòng Cấu Hình
Dưới đây là nhận xét cấu hình dòng bằng cách thêm ‘#’ vào đầu dòng.
- name: Comment Line configuration
replace:
path: /etc/nginx/nginx.conf
regexp: '(\s+)gzip on'
replace: '\n\t#gzip on'
backup: yesĐặt thuộc tính của tệp bằng mô-đun tệp trong Ansible
Mô-đun tệp có thể được sử dụng để đặt thuộc tính của chính tệp, chẳng hạn như thay đổi chủ sở hữu, nhóm và quyền, tạo liên kết tượng trưng, tạo thư mục mới và xóa liên kết tượng trưng, tệp hoặc thư mục.
1. Tạo Symlink của File
Tạo một tệp liên kết tượng trưng trên máy chủ từ xa cho cấu hình máy chủ ảo nginx có tên ‘vhost’ vào thư mục ‘/etc/nginx/sites-enabled/’.
- name: Create Symlink of file
file:
src: /etc/nginx/sites-available/vhost
dest: /etc/nginx/sites-enabled/vhost
owner: root
group: root
state: link2. Tạo Thư mục mới bằng mô-đun tệp
Để tạo một thư mục mới bằng mô-đun tệp, chúng ta cần sử dụng tùy chọn trạng thái với giá trị ‘thư mục’ như bên dưới.
- name: Create a New Directory using file
file:
path: /etc/nginx/ssl
state: directory
owner: root
group: root
mode: 0755








Add Comment