GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ansible:Prüfen, ob eine Datei existiert

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 .


Ubuntu
  1. Wie überprüfe ich den Fortschritt des Laufens von Cp?

  2. Existiert ein Liner zum Überprüfen der Datei?

  3. Befehl zum Anzeigen einer willkürlichen Meldung, wenn eine bestimmte Datei vorhanden ist?

  4. Wie kann ich überprüfen, ob eine Datei vorhanden ist, und einen Befehl ausführen, wenn dies nicht der Fall ist?

  5. Wie kann ich mit sudo prüfen, ob eine Datei existiert?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

Ansible Inventar- und Konfigurationsdateien

So erstellen und führen Sie eine Ansible Playbook-Datei aus

Eine kurze Einführung in Ansible Vault

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist