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.
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.
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.
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'.
Thay đổi tên máy chủ trên tệp '/etc/hosts' 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'.
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