Tutorial

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

congdonglinux_Ansible_Logo

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

congdonglinux_Ansible_Logo

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: yes

2. 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: 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 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: 0755

4. 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: 0644

Tả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: 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 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 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 đ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: yes

4. 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: yes

7. 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: yes

8. 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.

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: link

2. 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

Tham khảo

https://docs.ansible.com

Add Comment

Click here to post a comment