Ansible

So verwenden Sie das Ansible Register Modul

So verwenden Sie das Ansible Register Modul
In Ansible können Sie jeden Shell-Befehl auf Ihren Ansible-Hosts ausführen, den Hosts, die Sie mit Ansible konfigurieren configuring. Diese Shell-Befehle können Ausgaben haben. Standardmäßig wird die Ausgabe ignoriert. Wenn Sie die Ausgabe in einer Variablen speichern und später verwenden möchten, können Sie die Ansible registrieren Modul. In diesem Artikel erfahren Sie, wie Sie Ansible verwenden registrieren Modul, um die Befehlsausgabe in einer Variablen zu speichern und später in Ihrem Ansible-Playbook darauf zuzugreifen.

Voraussetzungen

Wenn Sie die Beispiele in diesem Artikel ausprobieren möchten, müssen Sie:

1) Lassen Sie Ansible auf Ihrem Computer installieren.

2) Lassen Sie einen Ubuntu-Host für die Ansible-Automatisierung konfigurieren.

Es gibt viele Artikel zu LinuxHint, die sich mit der Installation von Ansible und der Konfiguration von Hosts für die Ansible-Automatisierung beschäftigen. Sie können diese Artikel bei Bedarf lesen.

Einrichten eines Projektverzeichnisses

Bevor Sie fortfahren, richten Sie ein neues Ansible-Projektverzeichnis ein, um die Dinge ein wenig organisiert zu halten.

So erstellen Sie das Projektverzeichnis registrieren-demo/ und alle erforderlichen Unterverzeichnisse (in Ihrem aktuellen Arbeitsverzeichnis) führen Sie den folgenden Befehl aus:

$ mkdir -pv registrieren-demo/playbooks

Navigieren Sie nach dem Erstellen des Projektverzeichnisses wie folgt zum Projektverzeichnis:

$ cd registrieren-demo/

Ein ... kreieren Gastgeber Inventardatei wie folgt:

$ Nano-Hosts

Fügen Sie die Host-IP oder den DNS-Namen Ihres Ubuntu-Hosts in die Inventardatei ein (ein Host pro Zeile), wie im Screenshot unten gezeigt.

Hier habe ich mein Ubuntu 20 . hinzugefügt.04 LTS-Host vm3.Knotendrachen.com in dem ubuntu20 Gruppe.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + X, gefolgt von Ja und .

Erstellen Sie eine Ansible-Konfigurationsdatei ansible.cfg in Ihrem Projektverzeichnis wie folgt:

$ nano ansible.cfg

Geben Sie als Nächstes die folgenden Zeilen in das ansible.cfg Datei:

[Standardwerte]
Inventar           = Gastgeber
host_key_checking   = Falsch

Wenn Sie fertig sind, speichern Sie die ansible.cfg Datei durch Drücken von + X, gefolgt von Ja und .

Versuchen Sie nun, Ihren Ubuntu-Host wie folgt zu pingen:

$ ansible ubuntu20 -u ansible -m ping

Wie Sie sehen können, ist mein Ubuntu 20.04 Gastgeber vm3.Knotendrachen.com ist zugänglich.

Beispiel 1: Die Grundlagen

In diesem Beispiel zeige ich Ihnen einige der Grundlagen des Ansible registrieren Modul. Ich werde Ansible verwenden, um ein zufälliges Passwort in meinem Ubuntu 20 zu generieren.04-Host mit dem pwgen Befehl speichern Sie das Passwort in einer Variablen mit dem registrieren Modul und drucken Sie das Passwort auf dem Bildschirm aus.

Erstellen Sie zuerst das neue Playbook generiere_pass.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/generate_pass.yaml

Geben Sie die folgenden Zeilen in die ein generiere_pass.yaml Datei:

- Hosts: ubuntu20
Benutzer: ansible
wahr werden
Aufgaben:
- name: Stellen Sie sicher, dass pwgen installiert ist
geeignet:
Name: pwgen
Zustand: vorhanden
update_cache: Richtig
- Name: Passwort generieren
Schale: pwgen -N 1 -s 30
registrieren: mypass
- name: Drucken Sie das generierte Passwort aus
debuggen:
msg: "Das Passwort ist mypass "

Wenn Sie fertig sind, drücken Sie + X, gefolgt von Ja und , um die zu retten generiere_pass.yaml Datei.

Die folgende Zeile weist Ansible an, das Playbook auszuführen generiere_pass.yaml auf jedem Host in der ubuntu20 Gruppe. In meinem Fall wird das Playbook auf dem Host ausgeführt vm3.Knotendrachen.com.

In diesem Playbook werde ich drei Aufgaben definieren.

Die erste Aufgabe stellt sicher, dass die pwgen Paket ist installiert.

Die zweite Aufgabe generiert ein zufälliges, 30-stelliges Passwort unter Verwendung der pwgen Befehl. Ich werde die verwenden registrieren Modul zum Speichern des generierten Passworts im meinpass Variable.

Die dritte Aufgabe druckt die meinpass variabel mit Ansible debuggen Modul.

Führen Sie das Playbook aus generiere_pass.yaml mit dem folgenden Befehl:

$ ansible-playbook playbooks/generate_pass.yaml

Wie Sie sehen, lief das Playbook erfolgreich. Ein Passwort wurde auch generiert.

Aber warum hat die Variable meinpass Drucken Sie so viele Artikel?

Nun, die Variable meinpass ist ein Objekt, das einige wichtige Eigenschaften enthält.

Die wichtigsten Eigenschaften der einzelnen registrieren Variablen sind wie folgt:

cmd - Der Befehl, der ausgeführt wurde, um die Ausgabe zu generieren.

stdout - Die Ausgabe des Befehls.

stderr - Die Fehlerausgabe des Befehls.

Start - Datum und Uhrzeit des Beginns der Ausführung des Befehls.

Ende - Datum und Uhrzeit der Ausführung des Befehls.

Delta - Die zum Ausführen des Befehls benötigte Zeit time. Dies ist der Unterschied zwischen den Ende und der Start Eigenschaften.

stdout_lines - Ein Array, das jede Ausgabezeile des Befehls enthält. Gleich wie stdout, aber stdout trennt die Zeilen mit einem Zeilenumbruch (\n) anstelle von Arrays.

stderr_lines -  Ein Array, das jede Fehlerausgabezeile des Befehls enthält. Gleich wie stderr, aber stderr trennt die Zeilen mit Zeilenumbrüchen (\n) anstelle von Arrays.

Wenn Sie nur die Kennwortzeichenfolge drucken/zugreifen möchten (was sehr wahrscheinlich ist), können Sie die stdout Eigentum der meinpass Variable in Ihrem Playbook, wie im Screenshot unten markiert.

$ Nano-Playbooks/generate_pass.yaml

Wenn Sie fertig sind, führen Sie das Playbook aus generiere_pass.yaml nochmal. Es wird nur die Passwortzeichenfolge gedruckt, wie Sie im Screenshot unten sehen können.

Das deckt die Grundlagen des Ansible . ab registrieren Modul.

Beispiel 2: Verzeichnisinhalte speichern

In diesem Beispiel zeige ich Ihnen, wie Sie den Inhalt eines Verzeichnisses in einer Variablen mit dem Ansible speichern registrieren Modul, sowie wie man über sie iteriert.

Erstellen Sie zuerst das neue Playbook get_dir_contents.yaml in dem Spielbücher/ Verzeichnis.

$ Nano-Playbooks/get_dir_contents.yaml

Geben Sie als Nächstes die folgenden Zeilen in das get_dir_contents.yaml Spielbuch:

- Hosts: ubuntu20
Benutzer: ansible
wahr werden
Aufgaben:
- name: Listet alle Dateien und Verzeichnisse in /home/ansible . auf
Shell: ls /home/ansible
registrieren: dir_contentscontent
- name: Verzeichnisinhalt mit Schleifen drucken
debuggen:
msg: " item "
Schleife: " dir_contents.stdout_lines "

Wenn Sie fertig sind, drücken Sie + X, gefolgt von Ja und , um die zu retten generiere_pass.yaml Datei.

In diesem Playbook werde ich zwei Aufgaben definieren.

Die erste Aufgabe listet alle Inhalte der /home/ansible Verzeichnis und speichert sie im dir_contents Variable.

Die zweite Aufgabe druckt die dir_contents Variable.

Führen Sie die get_dir_contents.yaml Spielbuch, wie folgt.

$ ansible-playbook playbooks/get_dir_contents.yaml

Wie Sie sehen können, ist die stdout_lines Eigenschaft hat den Inhalt des Verzeichnisses als Array gespeichert stored. Das stdout Eigenschaft wird auch im Verzeichnisinhalt gespeichert. Diese Eigenschaften werden durch Zeilenumbrüche (\n) getrennt. In diesem Beispiel ist die stdout_lines Eigenschaft ist einfach zu bearbeiten.

Als nächstes durchlaufen Sie den Inhalt des Verzeichnisses mit einer Schleife.

Öffnen Sie dazu das get_dir_contents.yaml Playbook und ändern Sie die zweite Aufgabe, wie im Screenshot unten markiert.

$ Nano-Playbooks/get_dir_contents.yaml

Hier iteriere ich über die dir_contents.stdout_lines Array mit einer Schleife und Drucken der Array-Elemente mit dem Ansible debuggen Modul. Bei dieser Aufgabe wird der Artikel Variable ist eine Schleifenvariable, die verwendet wird, um über die Array-Elemente zu iterieren.

Führen Sie die get_dir_contents.yaml Spielbuch wie folgt:

$ ansible-playbook playbooks/get_dir_contents.yaml

Wie Sie sehen, ist der Inhalt der /home/ansible Verzeichnis werden auf dem Bildschirm ausgedruckt.

Beispiel 3: Verzeichnis sichern

In diesem Beispiel zeige ich Ihnen, wie Sie ein Verzeichnis mit dem Ansible . sichern registrieren, Datei, und Kopieren Module.

Erstellen Sie zuerst das neue Playbook backup_home_dir.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/backup_home_dir.yaml

Geben Sie als Nächstes die folgenden Zeilen in das backup_home_dir.yaml Datei.

- Hosts: ubuntu20
Benutzer: ansible
wahr werden
Aufgaben:
- name: Home-Verzeichnis abrufen /home/ansible content
Shell: ls /home/ansible
registriere: dir_contents
- name: Erstelle ein neues Verzeichnis /tmp/ansible
Datei:
Pfad: /tmp/ansible
Zustand: Verzeichnis
- Name: Home-Verzeichnis /home/ansible nach /tmp/ansible sichern
Kopieren:
src: /home/ansible/ item
Ziel: /tmp/ansible/
remote_src: Richtig
Schleife: " dir_contents.stdout_lines

Wenn Sie fertig sind, drücken Sie + X, gefolgt von Ja und , um die zu retten backup_home_dir.yaml Datei.

In diesem Playbook werde ich drei Aufgaben definieren.

Die erste Aufgabe speichert den Inhalt des /home/ansible Verzeichnis (das Verzeichnis, das ich sichern werde) im dir_contents variabel mit Ansible registrieren Modul.

Die zweite Aufgabe erstellt ein neues Verzeichnis /tmp/ansible mit dem Ansible Datei Modul. Dies ist das Verzeichnis, in dem das Backup gespeichert wird.

Die dritte Aufgabe durchläuft die dir_contents.stdout_lines Array und verwendet das Ansible Kopieren Modul zum Kopieren jedes Verzeichnisses in die /tmp/ansible/ Verzeichnis.

Führen Sie die backup_home_dir.yaml Spielbuch wie folgt:

$ ansible-playbook playbooks/backup_home_dir.yaml

Wie Sie sehen können, auf meinem Ubuntu 20.04 LTS-Host, das Backup war erfolgreich.

Beispiel 4: Aufgaben ausführen oder überspringen

In diesem Beispiel zeige ich Ihnen, wie Sie Aufgaben ausführen oder überspringen, je nachdem, welche Variable Sie registriert haben registrieren Modul.

Erstellen Sie zuerst das neue Playbook register_conditions.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$ Nano-Playbooks/register_conditions.yaml

Geben Sie als Nächstes die folgenden Zeilen in das register_conditions.yaml Datei.

- Hosts: ubuntu20
Benutzer: ansible
wahr werden
Aufgaben:
- name: Verzeichnisinhalt auflisten
Shell: ls /home/ansible/test3
registriere: dir_contents
- Name: Prüfen, ob Verzeichnis leer ist
debuggen:
msg: "Verzeichnis ist leer."
wann: dir_contents.stdout == ""

Wenn Sie fertig sind, drücken Sie + X, gefolgt von Ja und , um die zu retten register_conditions.yaml Datei.

In diesem Playbook habe ich zwei Aufgaben definiert.

Die erste Aufgabe speichert den Inhalt des /home/ansible/test3 Verzeichnis im dir_contents Variable.

Die zweite Aufgabe prüft, ob dir_contents.stdout eine leere Zeichenfolge ist oder ob das Verzeichnis /home/ansible/test3 ist leer. Wenn das Verzeichnis leer ist, wird die Nachricht Verzeichnis ist leer werde drucken.

Führen Sie die register_conditions.yaml Spielbuch wie folgt:

$ ansible-playbook playbooks/register_conditions.yaml

Wie Sie sehen, lief das Playbook erfolgreich.

Da das Verzeichnis /home/ansible/test3 ist leer, das Playbook hat die Nachricht gedruckt Verzeichnis ist leer.

Als nächstes erstellen Sie eine neue Datei im /home/ansible/test3 Verzeichnis.

$ touch test3/myfile

Seit der /home/ansible/test3 Verzeichnis ist nicht mehr leer, die Aufgabe Überprüfen Sie, ob das Verzeichnis leer ist wird übersprungen, wie Sie im Screenshot unten sehen können.

$ ansible-playbook playbooks/register_conditions.yaml

Fazit

Der Ansible registrieren Modul ist sehr nützlich für die Serverautomatisierung. Dieser Artikel zeigte Ihnen die Grundlagen der registrieren Modul, einschließlich Beispielen für die Verwendung des Ansible registrieren Modul zum Speichern und Sichern von Verzeichnissen und zum Ausführen von Verzeichnisaufgaben.

Beste Linux-Distributionen für Gaming im Jahr 2021
Das Linux-Betriebssystem hat sich weit von seinem ursprünglichen, einfachen, serverbasierten Aussehen entfernt. Dieses Betriebssystem hat sich in den ...
So erfassen und streamen Sie Ihre Gaming-Sitzung unter Linux
In der Vergangenheit galt das Spielen von Spielen nur als Hobby, aber mit der Zeit verzeichnete die Spieleindustrie ein enormes Wachstum in Bezug auf ...
Beste Spiele zum Spielen mit Handtracking
Oculus Quest hat kürzlich die großartige Idee des Hand-Trackings ohne Controller vorgestellt. Mit einer ständig steigenden Anzahl von Spielen und Akti...