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: