Hướng dẫn Ansible: Quản lý tập tin bằng Ansible

theanh

Administrator
Nhân viên
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

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ộ đến máy đích 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 'templates' trên sổ tay hướng dẫn Ansible.

Mô-đun 'copy' hữu ích để 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 đích 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, nó sẽ được thay thế và sao lưu dựa trên dấu thời gian.
Mã:
- name: Sao chép từ Máy cục bộ đến Máy đích từ xa bằng 'copy' copy: src: sources.list dest: /etc/apt/sources.list backup: yes

2. Sao chép Tệp trên Máy từ xa vào Thư mục khác​

Sao chép cấu hình sudoers '/etc/sudoers.d/hakase' trên máy từ xa vào thư mục khác '/home/hakase/hakase-suoers.txt'. Có thể thực hiện bằng tùy chọn 'remote_src'.
Mã:
- name: Sao chép tệp từ thư mục này sang thư mục khác trên Máy từ xa copy: src: /etc/sudoers.d/hakase dest: /home/hakase/hakase-sudoers.txt remote_src: yes

3. 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 tệp mặc định là '0755' và chủ sở hữu tệp là 'hakase'.
Mã:
- name: Sao chép tệp và thiết lập quyền và chủ sở hữu tệp copy: src: simple.sh dest: /home/hakase/simple.sh owner: hakase group: hakase mode: 0755

4. Sao chép tệp 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' đến 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ó có thể tái sử dụng nhiều hơn.
Mã:
- name: Sao chép tệp bằng mô-đun 'template' template: src: default.j2 dest: /etc/nginx/sites-enabled/ backup: yes owner: root group: root mode: 0644

Tải xuống tệp bằng Mô-đun Fetch trong Ansible​

Để tải xuống tệp từ máy từ xa đến nút ansible cục bộ của chúng ta, chúng ta có thể sử dụng mô-đun ansible có tên là 'fetch'.

1. Tải xuống từ máy từ xa đến máy cục bộ​

Tải xuống tệp cấu hình nginx 'nginx.conf' từ máy chủ từ xa đến thư mục ansible-node 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.
Mã:
- name: Tải xuống tệp từ máy từ xa đến thư mục ansible-node cục bộ become: yes fetch: src: /etc/nginx/nginx.conf dest: /home/hakase/backup/

2. Tải xuống từ Remote đến Local mà không cần cấu trúc thư mục​

Tải xuống từ Remote Machine đến Local ansible-node mà không cần cấu trúc thư mục bằng cách thêm tùy chọn 'flat'.
Mã:
- name: Tải xuống tệp từ Remote Machine đến Local ansible node mà không cần cấu trúc thư mục become: yes fetch: src: /etc/nginx/nginx.conf dest: /home/hakase/backup/ flat: yes

Chỉnh sửa tệp bằng Ansible​

Bây giờ chúng ta sẽ chỉnh sửa tệp bằng các 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à replace.

Blockinfile sẽ chèn/xóa nhiều dòng vào tệp. Lineinfile dành cho một dòng và có thể sử dụng mô-đun replace để 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 các dòng.
Mã:
- name: Chèn nhiều dòng và Backup
 blockinfile:
 path: /etc/ssh/sshd_config
 backup: yes
 block: |
 ClientAliveInterval 360
 ClientAliveCountMax 0

2. 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 đánh dấu và theo sau là 'insertafter' hoặc 'insertbefore' và Regex, hoặc bạn có thể sử dụng cả hai.

Sổ tay hướng dẫn 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 trước dòng 'UserPAM' được bao quanh bởi dấu hiệu mặc định '# BEGIN ANSIBLE MANAGED BLOCK'.
Mã:
- name: Chèn sau regex, sao lưu và xác thực
 blockinfile:
 path: /etc/ssh/sshd_config
 backup: yes
 mark: "# {mark} ANSIBLE MANAGED BLOCK "
 insertbefore: '^UsePAM '
 block: |
 AllowUsers hakase vagrant
 PermitEmptyPasswords no
 PermitRootLogin no
 validate: '/usr/sbin/sshd -T -f %s'

3. Xóa/Loại bỏ nhiều dòng xung quanh khối bên trong các đ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'.
Mã:
- name: Khối văn bản từ xa xung quanh bởi các điểm đánh dấu
 blockinfile:
 path: /etc/ssh/sshd_config
 điểm đánh dấu: "# {mark} ANSIBLE MANAGED BLOCK"
 content: ""
 backup: yes

4. Chèn một dòng mới vào tệp​

Chèn cấu hình dòng mới 'PasswordAuthentication no' dưới dòng regex '#PermitEmptyPasswords' vào cấu hình ssh '/etc/ssh/sshd_config'.
Mã:
- name: Chèn dòng mới dưới cấu hình Regex
 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/gỡ một dòng khỏi tệp, bạn có thể sử dụng tùy chọn 'state: absent' và theo sau là Biểu thức chính quy của dòng như bên dưới.
Mã:
- name: Xóa một dòng khỏi tệp
 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à mô-đun thay thế​

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 máy chủ trên tệp '/etc/hosts' bằng cách sử dụng mô-đun thay thế.
Mã:
- name: Thay thế mặc định
 replace:
 path: /etc/hosts
 regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
 replace: '\1box.hakase.labs\2'
 backup: yes

7. Bỏ chú thích cấu hình​

Có thể sử dụng mô-đun thay thế để bỏ chú thích cấu hình trên hệ thống Linux. Đơn giản, chúng ta có thể xóa chuỗi chú thích '#' ở đầu dòng bằng cách sử dụng mô-đun thay thế.

Bỏ chú thích dòng cấu hình 'server_tokens' trên tệp '/etc/nginx/nginx.conf'.
Mã:
- name: Bỏ chú thích configuration
 replace:
 path: /etc/nginx/nginx.conf
 regexp: '#(\s+)server_tokens'
 replace: 'server_tokens'
 backup: yes

8. Bình luận về Dòng Cấu hình​

Dưới đây là bình luận về cấu hình dòng bằng cách thêm '#' vào đầu dòng.
Mã:
- name: Bình luận Cấu hình dòng thay thế: 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 liên kết tượng trưng của tệp​

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 là 'vhost' tới thư mục '/etc/nginx/sites-enabled/'.
Mã:
- name: Tạo liên kết tượng trưng của tệp
 tệp:
 src: /etc/nginx/sites-available/vhost
 đích: /etc/nginx/sites-enabled/vhost
 chủ sở hữu: root
 nhóm: root
 trạng thái: liên kết

2. Tạo một thư mục mới bằng mô-đun file​

Để tạo một thư mục mới bằng mô-đun file, chúng ta cần sử dụng tùy chọn state với giá trị 'directory' như bên dưới.
Mã:
- name: Tạo một thư mục mới bằng file
 file:
 path: /etc/nginx/ssl
 state: directory
 owner: root
 group: root
 mode: 0755

Reference​

https://docs.ansible.com/
 
Back
Bên trên