Ansible Anleitung: Verwalten von Dateien mit Ansible

In diesem Handbuch zeige ich Ihnen, wie Sie Dateien mit Hilfe von Ansible-Modulen verwalten können und wie Sie Dateien mit Ansible kopieren, bearbeiten, einfügen, herunterladen und ersetzen können.

Was werden wir tun?

  • Kopieren Sie die Datei mit dem Modul „Kopieren“ und „Vorlagen“.
  • Datei mit dem Modul’fetch‘ herunterladen
  • Bearbeiten Sie die Datei mit Hilfe von ‚blockinfile‘, ‚lineinfile‘ und ‚replace‘ Modulen.
  • Verwalten von Dateiattributen

Kopieren Sie die Datei mit dem Modul’copy‘ und’templates‘ in Ansible.

Ansible stellt einige Module zum Kopieren von Dateien aus dem lokalen Verzeichnis auf die entfernten Zielmaschinen zur Verfügung, es ist das Modul’copy‘ und’template‘.

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

Das Modul „Kopie“ eignet sich gut zum Kopieren persistenter Dateien wie Zertifikate, während die „Vorlage“ eher für wiederverwendbare Konfigurationen wie virtuelle Host-Konfiguration usw. geeignet ist.

1. Datei vom lokalen auf den entfernten Zielcomputer kopieren

Kopieren Sie die Konfiguration von ’sources.list‘ im lokalen Verzeichnis ‚files‘ auf den Remotecomputer ‚/etc/apt/sources.list‘. Wenn es eine Konfiguration gibt, wird sie ersetzt und ein Backup basierend auf den Zeitstempeln erstellt.

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

2. Datei auf dem entfernten Computer in ein anderes Verzeichnis kopieren

Kopieren Sie die Sudoers-Konfiguration ‚/etc/sudoers.d/hakase‘ auf dem entfernten Rechner 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 den Besitzer der Datei.

Kopieren Sie die bash-Datei im Verzeichnis „files“ auf den Remote-Server und machen Sie die Standardberechtigung „0755“ 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 Template-Modul kopieren

Kopieren Sie die Jinja2-Vorlagenkonfiguration für den virtuellen Host von nginx 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 wiederverwendbarer 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 ansiblen Knoten herunterzuladen, können wir das ansible Modul namens’fetch‘ verwenden.

1. Herunterladen von einer entfernten Maschine auf eine lokale Maschine

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 wird die Verzeichnisstrukturen enthalten.

- 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 auf Local ohne Verzeichnisstrukturen

Laden Sie von der entfernten Maschine in den lokalen Ansiblen Knoten ohne Verzeichnisstrukturen 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 kennen müssen, um Dateien mit dem Ansible zu bearbeiten, wie z.B. blockinfile, lineinfile und replace.

Die Blockinfo fügt mehrere Zeilen in die Datei ein bzw. entfernt sie. Die Liniendatei ist für die einzelne Zeile, und das Ersetzungsmodul kann zum Ersetzen von Zeichenketten verwendet werden.

1. Mehrere Zeilen in eine Datei einfügen mit Hilfe von’blockinfile‘.

Fügen Sie der ssh-Konfiguration ’sshd_config‘ über das Modul’blockinfile‘ mehrere Zeilen Konfiguration hinzu. Und das Standard-Setup fügt die neue Konfiguration in die unteren 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 spezifische Zeile einfügen möchten, können Sie die Marker-Option verwenden und mit’insertafter‘ oder’insertbefore‘ und Regex folgen, oder Sie können beide verwenden.

Das untenstehende Playbook fügt eine neue zusätzliche Konfiguration in die Datei’sshd_config‘ ein. Die zusätzliche Konfiguration wird vor der Zeile’UserPAM‘ 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 mehrerer Linien blockieren die Umgebung innerhalb der Markierungen.

Entfernen Sie den Block der Linienumgebung durch die ansible Markierung’# BEGIN ANSIBLE MANAGLE MANAGED BLOCK‘.

- name: Remote text block surrounding by markers
  blockinfile:
    path: /etc/ssh/sshd_config
    marker: "# {mark} ANSIBLE MANAGED BLOCK"
    content: ""
    backup: yes

4. Fügt eine neue Zeile in die Datei ein

Fügen Sie unter der Zeile regex ‚#PermitEmptyPasswords‘ die neue Zeilenkonfiguration ‚PasswordAuthentication no‘ in die ssh-Konfiguration ‚/etc/ssh/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 Linie aus der Datei mit dem Liniendatei-Modul.

Um eine Zeile aus der Datei zu entfernen/löschen, können Sie die Option’state: abwesend‘ verwenden und anschließend den regulären Ausdruck der Zeile wie unten beschrieben verwenden.

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

6. Ersetzen von Musterzeichenketten durch reguläre Ausdrücke und Ersetzen des Moduls

Jetzt werden wir eine Zeichenkette mit dem Modul’replace‘ ersetzen. Das Ersetzen-Modul benötigte den regulären Ausdruck als Backend-Referenz, um die Art der Zeichenketten zu ersetzen.

Ändern Sie den Namen des Hosts in der Datei ‚/etc/hosts‘ mit replace the module.

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

7. Unkommentierte Konfigurationen

Mit dem Ersetzungsmodul kann die Konfiguration auf dem Linux-System entkommentiert werden. Ganz einfach, wir können die Kommentarzeichenkette’#‘ am Anfang der Zeile mit dem replace-Modul entfernen.

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

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

8. Kommentar zur Konfigurationslinie

Nachfolgend wird die Linienkonfiguration kommentiert, 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

Setzen Sie die Attribute von Dateien über das Dateimodul in Ansible.

Das Dateimodul kann verwendet werden, um Attribute von Dateien selbst festzulegen, wie z.B. Eigentümer, Gruppe und Berechtigung ändern, einen Symlink erstellen, ein neues Verzeichnis erstellen und einen Symlink, eine Datei oder ein Verzeichnis löschen.

1. Symlink der Datei erstellen

Erstellen Sie eine Symlink-Datei auf dem Remote-Host für die Konfiguration des virtuellen Nginx-Hosts namens „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 eines neuen Verzeichnisses mit Hilfe des Dateimoduls

Um ein neues Verzeichnis mit dem Datei-Modul zu erstellen, müssen wir die Option state mit dem Wert’directory‘ verwenden, wie unten gezeigt.

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

Referenz

Weitere Tutorials aus unserer Linux Command Tutorial Serie:

Das könnte dich auch interessieren …