Einführung
Ansible ist ein Infrastructure-as-Code-Tool, mit dem Sie einen einzigen zentralen Ort (Ansible-Steuerknoten) verwenden können, um eine große Anzahl von Remote-Servern (Hosts) zu überwachen und zu steuern.
Verwenden Sie Ansible, um eine Reihe von Aufgaben einzurichten, die die Remote-Hosts ausführen können, darunter das Erstellen neuer Dateien und Verzeichnisse.
Dieses Tutorial behandelt verschiedene Möglichkeiten, wie Sie mit Ansible Dateien auf Remote-Hosts erstellen können.
Voraussetzungen
- Ein System, auf dem Ubuntu 20.04 ausgeführt wird
- Zugriff auf die Kommandozeile / das Terminalfenster
- Ansible installiert und konfiguriert (siehe unsere Anleitungen zum Installieren von Ansible unter Windows oder zum Installieren von Ansible unter Ubuntu)
Erstellen eines Ansible-Playbooks
Ansible-Playbooks sind Listen mit Aufgaben, die Ihre Remote-Hosts ausführen sollen. Sie können gespeichert und wiederverwendet werden, wodurch Sie komplexe Prozesse automatisieren können.
Jeder Befehl, den Sie an einen Remote-Host erteilen möchten, einschließlich des Erstellens von Dateien und Ordnern, ist eine Aufgabe, die Sie in ein Playbook aufnehmen müssen. Sobald Sie ein Playbook ausführen, führt Ihr Remote-Host alle darin definierten Aufgaben aus.
Um ein Ansible-Playbook zu erstellen, verwenden Sie den Befehl:
sudo nano /etc/ansible/playbook.yaml
Dieser Befehl erstellt eine .yaml-Datei mit dem Namen „playbook“ im Ansible-Installationsordner. Wir werden Aufgaben in der playbook.yaml verwenden Datei zum Erstellen von Dateien und Ordnern auf unseren Remote-Hosts.
Mit der Probelauffunktion von Ansible können Benutzer ein Playbook ausführen, ohne Änderungen an den Servern vorzunehmen. Es verwendet den eingebauten Prüfmodus, um ein Playbook vor der Ausführung auf Fehler zu prüfen.
Erstellen einer leeren Datei
Der schnellste Weg, eine leere Datei zu erstellen, ist die Verwendung von file
von Ansible Modul.
Fügen Sie Ihrem Ansible-Playbook die folgende Konfiguration hinzu:
---
- hosts: all
tasks:
- name: Creating an empty file
file:
path: "/your path"
state: touch
Die obige Datei hat die folgenden Komponenten:
hosts
: Definiert, auf welchen Remote-Hosts aus Ihrer Ansible-Inventardatei Sie die Aufgabe ausführen möchten. Alle bedeutet, dass jeder Host den Befehl erhält, Sie können aber auch den Namen einer Hostkategorie oder eines einzelnen Hosts eingeben.tasks
: Kündigt an, dass der entfernte Host eine Aufgabe ausführen muss.name
:Hier können Sie einen Namen für die Aufgabe definieren. Der Name dient nur zu Ihrer Information und hat keinen Einfluss auf die Aufgabe selbst.file
:Aktiviert das Dateimodul von Ansible, um eine neue Datei zu erstellen.path
:Definiert den Pfad für die neue Datei auf der Festplatte des Remote-Hosts.state
:Ähnlich wie beim Touch-Befehl im Ubuntu-Terminal geben Sietouch
ein erstellt eine leere Datei an dem von Ihnen gewählten Ort.
Um das Playbook auszuführen, verwenden Sie:
ansible-playbook /etc/ansible/playbook.yaml
Erstellen einer Datei mit Inhalt
Wenn Sie eine neue Datei mit Inhalt erstellen möchten, können Sie zuerst mit der obigen Methode eine leere Datei erstellen und dann die blockinfile
verwenden oder lineinfile
Modul zum Einfügen von Inhalten.
Ein schnellerer Weg ist die Verwendung von copy
Modul. Obwohl dieses Modul verwendet wird, um eine Datei vom Steuerknoten auf den Remote-Host zu kopieren, können Sie den content
einschließen Parameter zum sofortigen Hinzufügen von Inhalt zu einer leeren Datei.
Verwenden Sie diese Konfiguration in Ihrem Playbook:
---
- hosts: all
tasks:
- name: Creating a file with content
copy:
dest: "/your path"
content: |
line 01
line 02
In der Datei haben wir verwendet:
copy
:Aktiviert das Kopiermodul von Ansible.dest
:Definiert den Pfad für Ihre neue Datei.content
:Dieser Parameter fügtline 01
hinzu undline 02
als Inhalt der neuen Datei.
Mehrere Dateien erstellen
Sie können mehrere Dateien erstellen, indem Sie eine einzelne Aufgabe in einem Ansible-Playbook verwenden.
Verwenden Sie die folgende Konfiguration, um mehrere Dateien zu erstellen:
---
- hosts: all
tasks:
- name: Create multiple files
file:
path: "{{ item }}"
state: touch
with_items:
- test01.txt
- test02.txt
- test03.txt
- test04.txt
In der obigen Konfigurationsdatei haben wir Folgendes definiert:
path
:Der"{{ item }}"
Wert bedeutet, dass Ansible einen separaten Pfad für jede entsprechende Datei erstellt. Standardmäßig werden diese Dateien im Home-Ordner des Remote-Hosts abgelegt. Definieren Sie einen anderen Pfad, indem Sie/your_folder_path/"{{ item }}"
verwenden .with_items
:Dieser Parameter wird verwendet, um eine Liste der zu erstellenden Dateien zu starten. Listen Sie so viele Dateien auf, wie Sie möchten. In unserem Beispiel haben wir eine Liste mit vier Dateien mit dem Titel test erstellt .
Erstellen eines Verzeichnisses
Beim Erstellen eines neuen Verzeichnisses wird dieselbe Konfiguration wie beim Erstellen einer leeren Datei verwendet. Der einzige Unterschied besteht im state
Parameter geben Sie directory
ein als Wert:
---
- hosts: all
tasks:
- name: Creating a new directory
file:
path: "/your path"
state: directory
Dateien entfernen
Ansible-Playbooks können auch vorhandene Dateien entfernen. Legen Sie dazu den state
fest -Parameter auf absent
:
---
- hosts: all
tasks:
- name: Removing a file
file:
path: "/your path"
state: absent
Wenn die Datei bereits entfernt wurde, bewirkt dieser Befehl nichts.
Dateiberechtigungen festlegen
Mit allen oben genannten Beispielen können Sie auch die Berechtigung für neue Dateien und Ordner festlegen. Dazu müssen Sie den mode
verwenden Parameter.
Dafür gibt es zwei Möglichkeiten:
- Using octal mode format: Sie können Oktalzahlen wie 0644 oder 0777 verwenden. Vergessen Sie nicht die führende 0, da das Weglassen zu unerwarteten Ergebnissen führen kann.
- Format im symbolischen Modus verwenden: Sie können Werte wie
u=rwx
verwenden ,g=rx
, odero=rx
, wobeiu
steht für Eigentümer ,g
steht für Gruppe , undo
steht für Andere . Die Berechtigungen sind alsr
definiert zum lesen ,w
für schreiben , undx
für Ausführen .
Sie können beispielsweise den Oktalwert 0755 verwenden, während Sie den Besitzer definieren:
---
- hosts: all
tasks:
- name: Create a new file with permissions
file:
path: "/your path"
state: touch
mode: 0755
owner: test
Sie können auch das symbolische Äquivalent zu 0755 verwenden:
---
- hosts: all
tasks:
- name: Create a new file with permissions
file:
path: "/your path"
state: touch
mode: u=rwx,g=rx,o=rx
owner: test