So verwenden Sie ein ansible Registermodul

So verwenden Sie ein ansible Registermodul
In Ansible können Sie jeden Shell -Befehl auf Ihren Ansible -Hosts ausführen, die Hosts, die Sie mit Ansible konfigurieren. Diese Shell -Befehle haben möglicherweise Ausgänge. Standardmäßig wird die Ausgabe ignoriert. Wenn Sie die Ausgabe in einer Variablen speichern und später verwenden möchten, können Sie das Ansible verwenden registrieren Modul. Dieser Artikel zeigt Ihnen, wie Sie das Ansible verwenden können registrieren Modul zum Speichern der Befehlsausgabe in einer Variablen und später in Ihrem Ansible Playbook zugreift darauf.

Voraussetzungen

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

1) Ansible auf Ihrem Computer installieren lassen.

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

Es gibt viele Artikel unter LinuxHint, die der Installation von Ansible und Konfigurieren von Hosts für Ansible Automation gewidmet sind. Sie können diese Artikel bei Bedarf überprüfen.

Einrichten eines Projektverzeichnisses

Richten Sie vor dem weiteren weiter.

Um das Projektverzeichnis zu erstellen Register-Demo/ und alle erforderlichen Unterverzeichnisse (in Ihrem aktuellen Arbeitsverzeichnis) führen Sie den folgenden Befehl aus:

$ mkdir -pv Register -Demo/Playbooks

Sobald das Projektverzeichnis erstellt wurde, navigieren Sie wie folgt zum Projektverzeichnis:

$ CD Register-Demo/

Ein ... kreieren Gastgeber Inventardatei wie folgt:

$ nano Gastgeber

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

Hier habe ich meinen Ubuntu 20 hinzugefügt.04 LTS Host VM3.Nodekite.com im Ubuntu20 Gruppe.

Sobald Sie fertig sind, speichern Sie die Datei durch Drücken + X, gefolgt von Y 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 die Ansible.CFG Datei:

[Standardeinstellungen]
Inventory = Hosts
host_key_checking = false

Sobald Sie fertig sind, speichern Sie die Ansible.CFG Datei durch Drücken + X, gefolgt von Y Und .

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

$ ansible Ubuntu20 -U Ansible -m Ping

Wie Sie sehen können, mein Ubuntu 20.04 Host VM3.Nodekite.com ist zugänglich.

Beispiel 1: Die Grundlagen

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

Erstellen Sie zunächst das neue Spielbuch generate_pass.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/generate_pass.Yaml

Geben Sie die folgenden Zeilen in die generate_pass.Yaml Datei:

- Hosts: Ubuntu20
Benutzer: Ansible
wahr werden
Aufgaben:
- Name: Stellen Sie sicher, dass PWGEN installiert ist
geeignet:
Name: Pwgen
Zustand: Gegenwart
update_cache: true
- Name: Passwort generieren
Shell: Pwgen -n 1 -s 30
Register: MyPass
- Name: Drucken Sie das generierte Passwort aus
debuggen:
MSG: "Das Passwort ist mypass"

Sobald Sie fertig sind, drücken Sie + X, gefolgt von Y Und , um die zu retten generate_pass.Yaml Datei.

Die folgende Zeile fordert Ansible auf, das Spielbuch auszuführen generate_pass.Yaml auf jedem Host in der Ubuntu20 Gruppe. In meinem Fall wird das Spielbuch auf dem Host ausgeführt VM3.Nodekite.com.

In diesem Spielbuch werde ich drei Aufgaben definieren.

Die erste Aufgabe wird ergeben, dass die pwgen Paket ist installiert.

Die zweite Aufgabe erzeugt ein zufälliges Kennwort mit 30-Zeichen mit dem pwgen Befehl. Ich werde das verwenden registrieren Modul zum Speichern des generierten Passworts in der Mypass Variable.

Die dritte Aufgabe druckt die Mypass Variable mit dem Ansible debuggen Modul.

Führen Sie das Spielbuch aus generate_pass.Yaml Verwenden des folgenden Befehls:

$ Ansible-Playbook-Playbooks/generate_pass.Yaml

Wie Sie sehen können, lief das Spielbuch erfolgreich. Es wurde auch ein Passwort generiert.

Aber warum hat die Variable Mypass Drucken Sie so viele Artikel aus?

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

Die wichtigsten Eigenschaften von jedem der registrieren Variablen sind wie folgt:

CMD - Der Befehl, der lief, um die Ausgabe zu erzeugen.

Stdout - Die Ausgabe des Befehls.

Stderr - Die Fehlerausgabe des Befehls.

Start - Das Datum und die Uhrzeit, zu der der Befehl ausgeführt wurde.

Ende - Datum und Uhrzeit, zu dem der Befehl ausgeführt wurde.

Delta - Die Zeit, die zum Ausführen des Befehls benötigt wird. Dies ist der Unterschied zwischen den Ende und das Start Eigenschaften.

stdout_lines - Ein Array, das jede Ausgabestelle des Befehls enthält. Gleich wie Stdout, Aber Stdout trennt die Zeilen mithilfe einer neuen Zeichen (\ n) anstelle von Arrays.

stderr_lines - Ein Array, das jede Fehlerausgabezeile des Befehls enthält. Gleich wie Stderr, Aber Stderr trennt die Zeilen mit den Newlines (\ n) Zeichen anstelle von Arrays.

Wenn Sie nur die Kennwortzeichenfolge ausdrucken/zugreifen möchten (was sehr wahrscheinlich ist), können Sie die drucken/zugreifen Stdout Eigentum des Mypass Variable in Ihrem Spielbuch, wie im Screenshot unten markiert.

$ nano playbooks/generate_pass.Yaml

Sobald Sie fertig sind, führen Sie das Spielbuch aus generate_pass.Yaml nochmal. Nur die Passwortzeichenfolge wird gedruckt, wie Sie im Screenshot unten sehen können.

Das deckt die Grundlagen des Ansiblens ab registrieren Modul.

Beispiel 2: Inhalt des Verzeichnisses speichern

In diesem Beispiel werde ich Ihnen zeigen registrieren Modul sowie wie man über sie itert.

Erstellen Sie zunächst das neue Spielbuch get_dir_contents.Yaml im Playbooks/ Verzeichnis.

$ nano playbooks/get_dir_contents.Yaml

Geben Sie als nächstes die folgenden Zeilen in die get_dir_contents.Yaml Spielbuch:

- Hosts: Ubuntu20
Benutzer: Ansible
wahr werden
Aufgaben:
- Name: Listen Sie alle Dateien und Verzeichnisse in /home /ansible auf
Shell: LS /Home /Ansible
Register: Dir_Contents
- Name: Druckenverzeichnisinhalt mit Schleifen drucken
debuggen:
msg: "item"
Schleife: "Dir_Contents.STDOut_LINES "

Sobald Sie fertig sind, drücken Sie + X, gefolgt von Y Und , um die zu retten generate_pass.Yaml Datei.

In diesem Spielbuch werde ich zwei Aufgaben definieren.

Die erste Aufgabe listet den gesamten Inhalt der auf /home/Ansible Verzeichnis und speichert sie in der Dir_Contents Variable.

Die zweite Aufgabe druckt die Dir_Contents Variable.

Leiten Sie die get_dir_contents.Yaml Spielbuch wie folgt.

$ Ansible-Playbook Playbooks/get_dir_contents.Yaml

Wie Sie sehen können, die stdout_lines Das Eigentum speicherte den Verzeichnisgehalt als Array. Der Stdout Eigentum wird auch im Verzeichnisgehalt gespeichert. Diese Eigenschaften werden durch neue (\ n) Zeichen getrennt. In diesem Beispiel die stdout_lines Eigenschaft ist leicht zu arbeiten.

Als nächstes über den Verzeichnisgehalt mit einer Schleife iterieren.

Öffnen Sie dazu die get_dir_contents.Yaml Spielbuch und ändern Sie die zweite Aufgabe, wie im Screenshot unten markiert.

$ nano playbooks/get_dir_contents.Yaml

Hier bin ich über die Iterie Dir_Contents.stdout_lines Array mit einer Schleife und Drucken der Array -Elemente mit dem Ansible debuggen Modul. In dieser Aufgabe die Artikel Variable ist eine Schleifenvariable, mit der über die Array -Elemente iteriert werden.

Leiten Sie die get_dir_contents.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/get_dir_contents.Yaml

Wie Sie sehen können, der Inhalt der /home/ansible Verzeichnis werden auf dem Bildschirm gedruckt.

Beispiel 3: Backup -Verzeichnis

In diesem Beispiel werde ich Ihnen zeigen, wie Sie ein Verzeichnis mit dem Ansible sichern können registrieren, Datei, Und Kopieren Module.

Erstellen Sie zunächst das neue Spielbuch backup_home_dir.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/backup_home_dir.Yaml

Geben Sie als nächstes die folgenden Zeilen in die backup_home_dir.Yaml Datei.

- Hosts: Ubuntu20
Benutzer: Ansible
wahr werden
Aufgaben:
- Name: Home Directory /Home /Ansible Inhalt
Shell: LS /Home /Ansible
Register: Dir_Contents
- Name: Erstellen Sie ein neues Verzeichnis /TMP /Ansible
Datei:
Pfad: /tmp /Ansible
Zustand: Verzeichnis
- Name: Backup Home Directory /Home /Ansible to /TMP /Ansible
Kopieren:
src:/home/ansible/item
dest:/tmp/ansible/
Remote_Src: True
Schleife: "Dir_Contents.stdout_lines

Sobald Sie fertig sind, drücken Sie + X, gefolgt von Y Und , um die zu retten backup_home_dir.Yaml Datei.

In diesem Spielbuch werde ich drei Aufgaben definieren.

Die erste Aufgabe speichert den Inhalt der /home/ansible Verzeichnis (das Verzeichnis, das ich unterstützen werde) in der Dir_Contents Variable mit dem Ansible registrieren Modul.

Die zweite Aufgabe erstellt ein neues Verzeichnis /TMP/Ansible mit dem Ansible Datei Modul. Dies ist das Verzeichnis, in dem die Sicherung gespeichert wird.

Die dritte Aufgabe schießt durch die Dir_Contents.stdout_lines Array und verwendet das Ansible Kopieren Modul, um jedes Verzeichnis in die zu kopieren /tmp/ansible/ Verzeichnis.

Leiten 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, abhängig von der von Ihnen registrierten Variablen mit der Verwendung der registrieren Modul.

Erstellen Sie zunächst das neue Spielbuch Register_Conditions.Yaml im Playbooks/ Verzeichnis wie folgt:

$ nano playbooks/register_conditions.Yaml

Geben Sie als nächstes die folgenden Zeilen in die Register_Conditions.Yaml Datei.

- Hosts: Ubuntu20
Benutzer: Ansible
wahr werden
Aufgaben:
- Name: Listenverzeichnisinhalt auflisten
Shell: LS/Home/Ansible/Test3
Register: Dir_Contents
- Name: Überprüfen Sie, ob das Verzeichnis leer ist
debuggen:
MSG: "Verzeichnis ist leer."
Wann: Dir_Contents.stdout == ""

Sobald Sie fertig sind, drücken Sie + X, gefolgt von Y Und , um die zu retten Register_Conditions.Yaml Datei.

In diesem Spielbuch habe ich zwei Aufgaben definiert.

Die erste Aufgabe speichert den Inhalt der /home/ansible/test3 Verzeichnis in der Dir_Contents Variable.

Die zweite Aufgabe überprüft, ob Dir_Contents.Stdout ist eine leere Zeichenfolge oder ob das Verzeichnis /home/ansible/test3 ist leer. Wenn das Verzeichnis leer ist, die Nachricht Verzeichnis ist leer wird drucken.

Leiten Sie die Register_Conditions.Yaml Spielbuch wie folgt:

$ Ansible-Playbook Playbooks/Register_Conditions.Yaml

Wie Sie sehen können, lief das Spielbuch erfolgreich.

Seit dem Verzeichnis /home/ansible/test3 ist leer, das Spielbuch hat die Nachricht gedruckt Verzeichnis ist leer.

Erstellen Sie als nächstes eine neue Datei in der /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

Abschluss

Der Ansible registrieren Das Modul ist sehr nützlich für die Serverautomatisierung. Dieser Artikel zeigte Ihnen die Grundlagen der registrieren Modul, einschließlich Beispiele für die Verwendung der Ansible registrieren Modul für Verzeichnisspeicher und Backup sowie für die Ausführung von Verzeichnisaufgaben.