Einführung
Ansible ist ein Infrastructure-as-Code-Tool, mit dem ein einzelner Kontrollknoten eine große Anzahl von Remote-Hosts (Servern) überwachen und verwalten kann.
Ansible verwendet Playbooks, um eine Vielzahl von Aufgaben zu definieren, die die Remote-Hosts ausführen sollen, einschließlich der Überprüfung, ob Dateien und Ordner vorhanden sind.
Dieses Tutorial behandelt die Verwendung von stat
Modul in Ansible, um zu prüfen, ob Dateien und Ordner auf Remote-Hosts vorhanden sind.
Voraussetzungen
- Zugriff auf die Kommandozeile / das Terminalfenster
- Ansible installiert und konfiguriert (siehe unsere Anleitungen zum Installieren von Ansible unter Windows und zum Installieren von Ansible unter Ubuntu)
Überprüfen, ob eine Datei in Ansible existiert
Der einfachste Weg, um mit Ansible zu überprüfen, ob eine Datei existiert, ist mit stat
Modul.
Der Zweck der stat
Modul ist es, Fakten über Dateien und Ordner abzurufen und in einem Register zu erfassen. Das Stat-Modul verwendet die folgende Syntax:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
...
Wo:
stat:
Erklärt, dass wir das Stat-Modul verwenden.path:
Gibt den Pfad zu der Datei oder dem Ordner an, den wir überprüfen möchten.register:
Liefert den Namen des Registers, in dem das Statistikmodul Datei- und Ordnerdetails speichert.
Einer der im Register aufgezeichneten Werte ist exists
. Kombinieren Sie diesen Wert mit debug
Mit dem Modul können Sie eine Meldung anzeigen, die angibt, ob eine Datei oder ein Ordner vorhanden ist:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists
1. Im Beispiel-Playbook ist die erste Aufgabe (Überprüfen, ob eine Datei existiert ) verwendet die stat
Modul zum Abrufen von Fakten über die test.txt
Datei, die sich in /home/example_folder befindet auf dem entfernten Host. Es zeichnet diese Fakten in einem Register mit dem Namen file_data
auf .
2. Die zweite Aufgabe (Melden, ob eine Datei existiert ) verwendet den debug
Modul, um eine Nachricht anzuzeigen. Es überprüft die file_data
registrieren und verwendet den exists
Wert als Bedingung für die Anzeige einer Meldung. Wenn der exists
Wert ist wahr , zeigt das Modul die Meldung „Die Datei oder das Verzeichnis existiert“ an .
3. Die dritte Aufgabe (Fehlende Datei melden ) macht dasselbe, außer dass es die Meldung ‘The file or directory does not exist’ anzeigt wenn der exists
Wert ist false .
Das Ausführen des Playbooks liefert die folgende Ausgabe:
Die Ausgabe sagt uns, dass die Datei tatsächlich nicht existiert.
Wenn Sie auch überprüfen möchten, ob es sich bei der betreffenden Datei um eine normale Datei und nicht um einen Ordner handelt, fügen Sie den isreg
hinzu -Wert zum debug
Modulzustand:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isreg
Überprüfen, ob ein Verzeichnis in Ansible existiert
Die Verwendung von Ansible zum Überprüfen, ob ein Verzeichnis vorhanden ist, ist genau dasselbe wie das Überprüfen, ob eine Datei vorhanden ist. Der einzige Unterschied besteht darin, dass Sie isdir
verwenden Wert, um den Pfad zum angegebenen Verzeichnis zu bestätigen:
- name: Task name
debug:
msg: "The file or directory exists"
when: register_name.stat.exists and register_name.stat.isdir
Ausführen von Ansible-Tasks in Abhängigkeit davon, ob Dateien und Ordner vorhanden sind
Es gibt Zeiten, in denen Sie Aufgaben in Ihrem Playbook ausführen oder überspringen möchten, je nachdem, ob bestimmte Dateien oder Ordner vorhanden sind.
Wenn Sie beispielsweise ein Playbook haben, das darauf ausgelegt ist, eine Datei auf jedem Remote-Host zu erstellen, möchten Sie die Hosts überspringen, auf denen die Datei bereits vorhanden ist, um die Erstellung von Duplikaten zu vermeiden.
Verwenden Sie dazu die von stat
abgerufenen Dateidetails Modul mit dem when
Argument zum Erstellen von Bedingungen für laufende Aufgaben:
---
- name: Playbook name
hosts: all
tasks:
- name: Task name
stat:
path: [path to the file or directory you want to check]
register: register_name
- name: Task name 2
file:
path: [path to the file you want to create]
state: touch
when: not register_name.stat.exists
...
1. Im obigen Playbook ist die erste Aufgabe (Überprüfen, ob eine Datei existiert ) verwendet die stat
Modul, um die Details der test.txt
abzurufen Datei im example_folder auf dem entfernten Host.
2. Die zweite Aufgabe (Erstelle eine Datei, falls sie noch nicht existiert ) beginnt mit der Überprüfung von exists
Wert im Register. Wenn der Wert true ist , wird die Aufgabe übersprungen und das Playbook beendet. Wenn der Wert false ist , wird die Aufgabe ausgeführt und eine neue Datei mit dem Namen test.txt
erstellt .