GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ansible Guide:Verwalten Sie Dateien mit Ansible

In diesem Leitfaden zeige ich Ihnen, wie Sie Dateien mit Ansible-Modulen verwalten. Sie erfahren, wie Sie Dateien mit Ansible kopieren, bearbeiten, einfügen, herunterladen und ersetzen.

Was werden wir tun?

  • Kopieren Sie die Datei mit den Modulen „Kopieren“ und „Vorlagen“
  • Datei mit dem 'Fetch'-Modul herunterladen
  • Datei mit den Modulen 'blockinfile', 'lineinfile' und 'replace' bearbeiten
  • Dateiattribute verwalten

Datei mit den Modulen „copy“ und „templates“ in Ansible kopieren

Ansible bietet einige Module zum Kopieren von Dateien aus dem lokalen Verzeichnis auf die Remote-Zielmaschinen, es sind die Module „copy“ und „template“.

Der Unterschied zwischen dem 'copy'- und 'template'-Modul besteht darin, dass das copy-Modul die Datei aus dem 'files'-Verzeichnis kopiert und das 'template' die Jinja2-Vorlage aus dem 'templates'-Verzeichnis in Ansible Playbooks kopiert.

Das Modul „Kopieren“ eignet sich gut zum Kopieren dauerhafter Dateien wie Zertifikate, während das Modul „Vorlage“ eher für wiederverwendbare Konfigurationen wie die Konfiguration virtueller Hosts usw. geeignet ist.

1. Datei vom lokalen auf den Remote-Zielcomputer kopieren

Kopieren Sie die Konfiguration „sources.list“ aus dem lokalen Verzeichnis „files“ auf den Remote-Computer „/etc/apt/sources.list“. Wenn eine Konfiguration vorhanden ist, wird sie ersetzt und basierend auf den Zeitstempeln gesichert.

- name: Copy from Local to Remote Target Machine with 'copy'
  copy:
    src: sources.list
    dest: /etc/apt/sources.list
    backup: yes

2. Datei auf Remote-Rechner in ein anderes Verzeichnis kopieren

Kopieren Sie die Sudoers-Konfiguration „/etc/sudoers.d/hakase“ auf dem Remote-Computer in das andere Verzeichnis „/home/hakase/hakase-suoers.txt“. Dies kann mit der Option 'remote_src' erfolgen.

- 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. Kopieren Sie die Datei und ändern Sie die Berechtigung und besitzen Sie die Datei

Kopieren Sie die Bash-Datei im Verzeichnis „files“ auf den Remote-Server-Rechner und legen Sie die Standarddateiberechtigung „0755“ fest und der Besitzer der Datei ist „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. Datei mit Vorlagenmodul kopieren

Kopieren Sie die Jinja2-Vorlagenkonfiguration für den virtuellen Nginx-Host aus dem Verzeichnis „templates“ in das Verzeichnis „/etc/sites-enabled/“ auf dem Remotecomputer. Mit der Jinja2-Vorlage können wir Variablen für unsere Konfiguration erstellen und sie besser wiederverwendbar machen.

- name: Copy file using 'template' module
  template:
    src: default.j2
    dest: /etc/nginx/sites-enabled/
    backup: yes
    owner: root
    group: root
    mode: 0644

Laden Sie eine Datei mit dem Fetch-Modul in Ansible herunter

Um eine Datei von der entfernten Maschine auf unseren lokalen Ansible-Knoten herunterzuladen, können wir das Ansible-Modul namens „fetch“ verwenden.

1. Download von einem Remote-Rechner auf lokal

Laden Sie die nginx-Konfigurationsdatei „nginx.conf“ vom Remote-Server in das lokale Ansible-Node-Verzeichnis „/home/hakase/backup“ herunter, um ein Backup zu erstellen. Und das Standard-Fetch-Modul enthält die Verzeichnisstrukturen.

- name: Download file from Remote Machine to Local ansible-node directory
  become: yes
  fetch:
    src: /etc/nginx/nginx.conf
    dest: /home/hakase/backup/

2. Download von Remote zu Local ohne Verzeichnisstrukturen

Laden Sie ohne Verzeichnisstrukturen von der Remote-Maschine auf den lokalen Ansible-Knoten herunter, indem Sie die Option „Flat“ hinzufügen.

- 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

Dateien mit Ansible bearbeiten

Jetzt werden wir Dateien mit Ansible-Modulen bearbeiten. Es gibt einige Module, die Sie zum Bearbeiten von Dateien mit Ansible kennen müssen, z. B. blockinfile, lineinfile und replace.

Die Blockdatei fügt mehrere Zeilen in die Datei ein/entfernt sie. Die lineinfile ist für die einzelne Zeile, und das replace-Modul kann verwendet werden, um string.

zu ersetzen

1. Mehrere Zeilen in Datei einfügen mit 'blockinfile'

Fügen Sie der SSH-Konfiguration „sshd_config“ mithilfe des Moduls „blockinfile“ eine Konfiguration mit mehreren Zeilen hinzu. Und das Standard-Setup fügt die neue Konfiguration am Ende der Zeilen ein.

- name: Insert multiple lines and Backup
  blockinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    block: |
      ClientAliveInterval 360
      ClientAliveCountMax 0

2. Mehrere Zeilen mit den Markierungsoptionen einfügen

Oder wenn Sie in die bestimmte Zeile einfügen möchten, können Sie die Markierungsoption verwenden und 'insertafter' oder 'insertbefore' und Regex gefolgt, oder Sie können beides verwenden.

Das folgende Playbook fügt eine neue zusätzliche Konfiguration in die Datei „sshd_config“ ein. Die zusätzliche Konfiguration wird vor der 'UserPAM'-Zeile hinzugefügt, die von der Standardmarkierung '# BEGIN ANSIBLE MANAGED BLOCK' umgeben ist.

- 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. Löschen/Entfernen Mehrere Linien blockieren die Umgebung innerhalb der Markierungen

Entfernen Sie den Zeilenblock um die ansible Markierung '# 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. Neue Zeile in Datei einfügen

Fügen Sie die neue Zeilenkonfiguration „PasswordAuthentication no“ unter der Regex-Zeile „#PermitEmptyPasswords“ in die SSH-Konfiguration „/etc/ssh/sshd_config“ ein.

- 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. Entfernen Sie die Zeile aus der Datei mit dem lineinfile-Modul

Um eine Zeile aus der Datei zu entfernen/löschen, können Sie die Option „Status:abwesend“ verwenden und den regulären Ausdruck der Zeile wie unten folgen.

- name: Remove a line from the file
  lineinfile:
    path: /etc/ssh/sshd_config
    state: absent
    regexp: '^PasswordAuthentication'

6. Musterzeichenfolgen durch regulären Ausdruck ersetzen und Modul ersetzen

Jetzt werden wir einen String mit dem Modul „replace“ ersetzen. Das Ersetzungsmodul benötigte den regulären Ausdruck als Backend-Referenz, um bestimmte Zeichenketten zu ersetzen.

Ändern Sie den Namen des Hosts in der Datei „/etc/hosts“, indem Sie das Modul ersetzen.

- name: Replace the default
  replace:
    path: /etc/hosts
    regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
    replace: '\1box.hakase.labs\2'
    backup: yes

7. Konfigurationen auskommentieren

Das Replace-Modul kann verwendet werden, um die Konfiguration auf dem Linux-System zu entkommentieren. Einfach, wir können die Kommentarzeichenfolge '#' am Zeilenanfang mit dem Ersetzungsmodul entfernen.

Entkommentieren Sie die Zeilenkonfiguration „server_tokens“ in der Datei „/etc/nginx/nginx.conf“.

- name: Uncomment configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '#(\s+)server_tokens'
    replace: 'server_tokens'
    backup: yes

8. Kommentar zur Konfigurationszeile

Unten ist die Zeilenkonfiguration zu kommentieren, indem das '#' am Anfang der Zeile hinzugefügt wird.

- name: Comment Line configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '(\s+)gzip on'
    replace: '\n\t#gzip on'
    backup: yes

Festlegen von Dateiattributen mithilfe des Dateimoduls in Ansible

Das Dateimodul kann verwendet werden, um Attribute von Dateien selbst zu setzen, wie Besitzer, Gruppe und Berechtigung ändern, einen Symlink erstellen, ein neues Verzeichnis erstellen und einen Symlink, eine Datei oder ein Verzeichnis löschen.

Erstellen Sie auf dem Remote-Host eine Symlink-Datei für die Konfiguration des virtuellen nginx-Hosts mit dem Namen „vhost“ im Verzeichnis „/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. Erstellen Sie ein neues Verzeichnis mit dem Dateimodul

Um ein neues Verzeichnis mit dem Dateimodul zu erstellen, müssen wir die Statusoption mit dem Wert „Verzeichnis“ wie unten verwenden.

- name: Create a New Directory using file
  file:
    path: /etc/nginx/ssl
    state: directory
    owner: root
    group: root
    mode: 0755

Linux
  1. Verwalten Sie den Start mit systemd

  2. So verwalten Sie Protokolldateien mit Logrotate unter Linux

  3. So verwenden Sie Logrotate zum Verwalten von Protokolldateien

  4. Führen Sie manuell zwei Dateien mit diff zusammen

  5. So kopieren Sie mehrere Dateien gleichzeitig mit scp

Cp-Befehl in Linux (Dateien kopieren)

So teilen Sie Dateien lokal unter Linux mit NitroShare

Ansible Inventar- und Konfigurationsdateien

So kopieren Sie Dateien mit einer bestimmten Dateierweiterung rekursiv

So kopieren Sie Dateien unter Linux mit dem CP-Befehl

Übertragen Sie Dateien mit WinSCP