Ich muss überprüfen, ob eine Datei in existiert /etc/
. Wenn die Datei existiert, muss ich die Aufgabe überspringen. Hier ist der Code, den ich verwende:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Sie können zuerst überprüfen, ob die Zieldatei vorhanden ist oder nicht, und dann basierend auf der Ausgabe des Ergebnisses eine Entscheidung treffen:
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
Wertstat_result.state.exists
False (und dann wird die zweite Task ausgeführt). Sie können Details des stat-Moduls hier sehen: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
an,when: not stat_result.stat.exists
wenn Sie möchten, dass es natürlicher liest.Das stat- Modul erledigt dies und erhält viele andere Informationen für Dateien. Aus der Beispieldokumentation:
quelle
Dies kann mit dem stat-Modul erreicht werden, um die Aufgabe zu überspringen, wenn eine Datei vorhanden ist.
quelle
Im Allgemeinen würden Sie dies mit dem stat-Modul tun . Das Befehlsmodul hat jedoch die
creates
Option, die dies sehr einfach macht:Ich denke, Ihr Touch-Befehl ist nur ein Beispiel? Die beste Vorgehensweise wäre, überhaupt nichts zu überprüfen und ansible seine Arbeit machen zu lassen - mit dem richtigen Modul. Wenn Sie also sicherstellen möchten, dass die Datei vorhanden ist, verwenden Sie das Dateimodul:
quelle
state: file
erstellt keine Dateien. Siehe docs.ansible.com/ansible/file_module.htmlquelle
when: mypath is not exists
das in diesem Fall? Ist das nichtmypath
eine einfache Zeichenfolge?Ich finde es ärgerlich und fehleranfällig, viele dieser
.stat.exists
Typprüfungen durchzuführen. Zum Beispiel benötigen sie besondere Sorgfalt, damit check mode (--check
) funktioniert.Viele Antworten hier schlagen vor
Manchmal ist dies jedoch ein Codegeruch. Suchen Sie daher immer nach besseren Möglichkeiten, Ansible zu verwenden. Insbesondere die Verwendung des richtigen Moduls bietet viele Vorteile. z.B
oder
Wenn es jedoch nicht möglich ist, ein Modul zu verwenden, prüfen Sie auch, ob Sie sich registrieren und das Ergebnis einer vorherigen Aufgabe überprüfen können. z.B
Beachten Sie das
when:
aber auch dascreates:
so--check
kein Fehler ausIch erwähne dies, weil diese weniger als idealen Praktiken oft paarweise auftreten, dh kein apt / yum-Paket, so dass wir 1) herunterladen und 2) entpacken müssen
Hoffe das hilft
quelle
Es wurde festgestellt, dass das Aufrufen
stat
langsam ist und viele Informationen sammelt, die für die Überprüfung der Dateiexistenz nicht erforderlich sind.Nachdem ich einige Zeit nach einer Lösung gesucht hatte, entdeckte ich folgende Lösung, die viel schneller funktioniert:
quelle
Sie können das Ansible stat- Modul verwenden, um die Datei zu registrieren, und das wann-Modul, um die Bedingung anzuwenden.
quelle
** **.
So überprüfen Sie anhand der when-Bedingung, ob eine Datei in Ansible vorhanden ist
** **.
Unten ist die Ansible-Wiedergabe, die ich verwendet habe, um die Datei zu entfernen, wenn die Datei auf dem Betriebssystemende vorhanden ist.
Ich habe die Spielbedingungen wie unten verwendet
Sie können je nach Anforderung wahr / falsch angeben
quelle
Wenn Sie nur sicherstellen möchten, dass eine bestimmte Datei vorhanden ist (z. B. weil sie anders als über ansible erstellt werden soll) und wenn dies nicht der Fall ist, können Sie Folgendes tun:
quelle
Ein Hinweis zu relativen Pfaden als Ergänzung zu den anderen Antworten.
Wenn ich Infrastruktur als Code verwende, verwende ich normalerweise Rollen und Aufgaben, die relative Pfade akzeptieren, insbesondere für Dateien, die in diesen Rollen definiert sind.
Spezielle Variablen wie playbook_dir und role_path sind sehr nützlich, um die absoluten Pfade zu erstellen, die zum Testen der Existenz erforderlich sind.
quelle