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

Erste Schritte mit Ansible Playbooks

Im letzten Artikel haben wir über Ansible-Ad-hoc-Befehle gesprochen . Was wir dort gelernt haben, wird in diesem Artikel angewendet, aber auf andere Weise. Dieses Tutorial erklärt anhand von Beispielen, was ein Playbook in Ansible ist und wie man mit Ansible Playbooks arbeitet.

Was ist Ansible Playbook?

Das Playbook ist ein YAML Datei, die verwendet wird, um eine oder mehrere Aufgaben für die verwalteten Hosts in der Umgebung auszuführen.

Der Hauptunterschied zwischen Ad-hoc-Befehlen und Playbooks besteht darin, dass Sie mit Ad-hoc-Befehlen einfache Einzeiler erstellen oder den Ad-hoc-Befehl in Shell-Skripten verwenden können, um einfache Aufgaben auszuführen. Wenn Sie komplexe sich wiederholende Vorgänge durchführen möchten, sollten Sie Playbooks schreiben und diese in einem zentralen Repository speichern und bei Bedarf verwenden.

Nehmen wir an, Sie sind Teil des Systemadministratorteams. Immer wenn ein neuer Server erstellt wird, ist Ihr Team für die Härtung des Servers gemäß Ihrer Unternehmensrichtlinie verantwortlich.

In diesem Fall können Sie ein Playbook erstellen und den Server härten. Jetzt kann das gleiche Playbook für die Anzahl N neuer Hosts verwendet werden, die gehärtet werden müssen.

Meine Ansible Lab-Struktur

Ich werde das Ansible-Lab verwenden, das mit zwei Ubuntu 20.04LTS-Knoten erstellt wurde. Sie können sich auf den folgenden Artikel beziehen, um das gleiche Labor-Setup bei Bedarf zu replizieren.

Erstellen Sie Ihr erstes Ansible-Playbook

Wie bereits erwähnt, sind Playbooks in YAML geschrieben Format. Das Playbook sollte eine .yml haben oder .yaml Verlängerung. Werfen Sie einen Blick auf den folgenden Link, wenn Sie mehr über YAML erfahren möchten.

Unten ist das Beispiel-Playbook, das ich verwenden werde, um zu demonstrieren, wie das Playbook funktioniert. Dies ist ein einfaches Playbook, das sich um die Einrichtung einer benutzerdefinierten Bannernachricht kümmert, wenn ich mich beim Knoten anmelde.

- Name:First Play - Modify Banner Message Hosts:ubuntu2 collect_facts:false werden:yes Aufgaben:- Name:Remove Execute Permission from /etc/update-motd.d/* file:path:/etc/update-motd .d/ Modus:u=rw,g=rw,o=rw Rekursion:ja - Name:BANNERMELDUNG HINZUFÜGEN Kopie:Inhalt:"Willkommen bei OSTechnix" Ziel:/etc/motd

Sehen wir uns die einzelnen Abschnitte dieses Playbooks an. Das Spielbuch ist in zwei Abschnitte unterteilt. Der erste Abschnitt enthält Spieldefinitionen wie Spielname, Zielhosts und Privilegienausweitung.

  • Name - Das Playbook sollte einen Spielnamen haben, der nichts anderes als eine logische Gruppierung des Zielhosts, der Parameter und der Aufgaben ist. Sie können mehr als ein Play im Playbook haben. Geben Sie dem Stück einen aussagekräftigen Namen.
  • Gastgeber - Zielhosts. Ansible überprüft die Inventardatei und überprüft, ob der in hosts angegebene Wert in der Inventardatei verfügbar ist.
  • werden - Wenn auf 'Ja' gesetzt führt die Aufgabe mit sudo-Berechtigung aus. Da ich die Berechtigung unter /etc/ ändere Verzeichnis, sollte die Aufgabe mit erhöhten Rechten übermittelt werden.

Werfen Sie einen Blick auf unseren umfassenden Artikel zur Rechteausweitung, um mehr darüber zu erfahren.

Im zweiten Abschnitt werden Aufgaben definiert. Sie sollten das Schlüsselwort "tasks" verwenden um die Aufgabe zu definieren. Hier habe ich zwei Aufgaben erstellt. Jede Aufgabe sollte mit dem Schlüsselwort "name" benannt werden .

  • Die erste Aufgabe entfernt die Ausführungserlaubnis von /etc/update-motd.d/* Verzeichnis. Ich verwende die Datei Modul dafür.
  • Die zweite Aufgabe schreibt die Zeichenfolge "Welcome to OSTechnix" nach /etc/motd Datei mit der Kopie Modul.

Lassen Sie mich vor dem Ausführen des Playbooks den Status meines Zielknotens überprüfen (managed2.anslab.com ), indem Sie sich beim Knoten anmelden. Sie können sehen, wenn ich mich beim Knoten anmelde, bekomme ich die Standard-Banner-Nachricht und die Ausführungsberechtigung ist für alle Dateien gesetzt.

$ ssh [E-Mail-geschützt]

Um das Playbook auszuführen, führen Sie den folgenden Befehl vom Terminal aus.

$ ansible-playbook  # SYNTAX$ ansible-playbook banner_mod.yml

Versuchen wir, die Ausgabe zu verstehen.

1. Wenn Sie das Spielbuch ausführen, sehen Sie als Erstes den Namen des Spiels.

PLAY [Bannernachricht ändern] *  

2. Die erste ansible Ausführung der Aufgabe ist "Fakten sammeln" . Wir haben diese Aufgabe nicht in unserem Playbook definiert, aber sie wird ausgeführt, wenn Sie sie nicht deaktivieren.

AUFGABE [Fakten sammeln] * 
ok:[managed2]

3. Jetzt wird die Aufgabe, die Sie in der YAML-Datei als Teil des Spiels definiert haben, nacheinander ausgeführt. Ansible liest das Playbook von oben nach unten, sodass Aufgaben in der im Playbook definierten Reihenfolge ausgeführt werden.

TASK [Ausführungsberechtigung von /etc/update-motd.d/* entfernen] ****************************** ****************************************************** ***********geändert:[managed2]AUFGABE [BANNERMELDUNG HINZUFÜGEN] **************************** ****************************************************** *********************************************geändert:[managed2 ]

4. Sobald alle Aufgaben abgeschlossen sind, erhalten Sie eine Zusammenfassung des Spiels, die Ihnen den Gesamtstatus der verschiedenen Aufgaben anzeigt. In unserem Fall liefen insgesamt drei Tasks (ok=3) inkl. Faktensammlung und nur zwei Tasks (changed=2) nahmen die Änderungen am Managed Node vor.

RECAP SPIELEN ***************************************** verwaltet2 :ok =3 geändert=2 nicht erreichbar=0 fehlgeschlagen=0 übersprungen=0 gerettet=0 ignoriert=0 

Jetzt kann ich den verwalteten Knoten validieren, um zu sehen, ob die Änderungen erfolgreich angewendet wurden.

Sammeln von Fakten deaktivieren

Wie im vorherigen Abschnitt vorhergesagt, sammelt Ansible beim Ausführen des Playbooks Fakten über die verwalteten Knoten, indem es das Setup-Modul ausführt . Sie können das Sammeln von Fakten deaktivieren, indem Sie die folgende Zeile in das Playbook einfügen.

gather_facts :false

Wenn Sie das Playbook jetzt erneut ausführen, sehen Sie nur noch zwei Aufgaben, die im Playbook definiert wurden. Da Ansible idempotent ist, versucht Ansible nicht, den Zustand des Objekts zu ändern, wenn es bereits geändert wurde. Die Ausgabe wird also als OK angezeigt .

Das Sammeln von Fakten wird die Plays verlangsamen, wenn Sie das Playbook gegen eine große Anzahl von Hosts spielen müssen. Dies liegt daran, dass Ansible sich mit dem verwalteten Knoten verbinden und viele Daten über den Knoten sammeln muss, was nicht für alle Fälle erforderlich ist.

Sie können den Ausführungszeitunterschied mit und ohne Fakten unten überprüfen.

$ time ansible-playbook banner_mod.yml # WITHOUT FACTSreal 0m1.642suser 0m0.731ssys 0m0.220s$ time ansible-playbook banner_mod.yml # WITH FACTSreal 0m2.547suser 0m1.139ssys 0m0.187s

Mehrere Plays ausführen

Sie können mehr als ein Play im Playbook haben. Wie Sie im folgenden Bild sehen können, hat mein zweites Spiel eine Aufgabe, die den sshd neu starten wird Dienst mit dem Dienst Modul in einem anderen Host.

- Name:Second Play - SSHD-Dienst neu starten Hosts:ubuntu1 collect_facts:false werden:ja Aufgaben:- Name:SSHD im Dienst managed1.anslab.com neu starten:Name:sshd-Status:neu gestartet

Lassen Sie uns das Playbook erneut ausführen und Sie können der Ausgabe entnehmen, dass beide Plays erfolgreich ausgeführt wurden.

$ ansible-playbook banner_mod.yml

Jetzt sollten Sie ein gutes Verständnis dafür haben, wie man ein Playbook schreibt und ausführt. Playbook unterstützt zusätzliche nützliche Funktionen, die wir im nächsten Abschnitt sehen werden.

Playbook-Syntax validieren

Sie können den --syntax-check verwenden -Flag, um nach Syntaxfehlern in Ihrem Playbook zu suchen. Ich habe absichtlich einen syntaktischen Fehler in den "gather_facts" gemacht Zeile in meinem Playbook.

$ ansible-playbook --syntax-check banner_mod.yml

Zur Bestätigung auffordern

Wenn Sie den --step verwenden Flagge, für jede Aufgabe in Ihrem Spiel werden Sie aufgefordert, mit der Aufgabe fortzufahren.

$ ansible-playbook --step banner_mod.yml

Führen Sie einen Probelauf durch

Anstatt die Aufgaben in verwalteten Knoten auszuführen, können Sie die Ausführung mit -C simulieren oder --check Flagge.

$ ansible-playbook -C banner_mod.yml

Beginnen Sie mit einer bestimmten Aufgabe

Sie haben die Möglichkeit, das Playbook von einer bestimmten Aufgabe aus auszuführen. Sie können aus dem folgenden Bild sehen, dass ich mit Play2 (Task1) begonnen habe, sodass sowohl die Aufgabe in Play1 übersprungen wird. Verwenden Sie das Flag --start-at-task und übergeben Sie den Aufgabennamen als Argument.

$ ansible-playbook banner_mod.yml --start-at-task "SSHD in managed1.anslab.com neu starten"

Aufgabe mit Tags ausführen

Sie können Spiele und Aufgaben mit Tags gruppieren . Mithilfe von Tags können Sie nur die Aufgaben mit bestimmten Tags ausführen oder die Aufgaben überspringen.

Sie können sich das folgende Bild ansehen, wo ich die "Tags" verwendet habe Schlüsselwort und legen Sie ihm einige Werte fest. Sie können einem einzelnen Tag auch mehrere Werte hinzufügen.

Sie können den folgenden Befehl ausführen, um die Liste der Aufgaben zusammen mit ihren Tags abzurufen.

$ ansible-playbook banner_mod.yml --list-tasks 
$ ansible-playbook banner_mod.yml --list-tags

Verwenden Sie -t Tag-Namen als Argument kennzeichnen und übergeben. Sie können entweder eine bestimmte Tag-basierte Aufgabe oder mehrere Tags ausführen, wie unten gezeigt. Im folgenden Beispiel verwende ich zwei verschiedene Tags aus zwei verschiedenen Stücken.

$ ansible-playbook -t "set_perm","restart service" banner_mod.yml

Sie können auch eine Aufgabe überspringen und alle anderen Aufgaben mit --skip-tags ausführen Flagge.

$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml

Ausführlichkeit erhöhen

Manchmal verhält sich das Playbook nicht so, wie Sie es erwarten. Es könnte etwas sein, das im Hintergrund passiert, oder andere Fehler.

Um das Problem zu beheben, können Sie beim Ausführen des Playbooks die Ausführlichkeit (-v) erhöhen. Es gibt vier Ausführlichkeitsstufen. Sie können die Ausführlichkeit entweder in der ansible.cfg einstellen Datei durch Hinzufügen der Eigenschaft "verbosity=<level " oder vom Terminal aus mit -v oder ANSIBLE_VERBOSITY Umgebungsvariable.

$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(-vvvv)

[ODER]

$ ANSIBLE_VERBOSITY=4 ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(ENV VARIABLE)

Parallelität kontrollieren

Wenn Sie das Playbook ausführen, führt Ansible die Aufgabe in Stapeln aus. Standardmäßig führt ansible eine Aufgabe in 5 Knoten parallel aus und sobald die gesamte Aufgabe in allen 5 Knoten abgeschlossen ist, wird sie zum nächsten Satz von 5 Knoten verschoben.

Ebenso wird eine Aufgabe in Stapeln von 5 ausgeführt, bis die Aufgabe in allen Knoten abgeschlossen ist, und dann zur nächsten Aufgabe übergehen und denselben Schritt wiederholen.

Sie können die Parallelität steuern und festlegen, wie viele Knoten parallel verarbeitet werden sollen, indem Sie die "forks" setzen -Parameter in der ansible.cfg Datei.

[Standard]
Inventar =Inventar
host_key_checking =Falsch
Gabeln=20

Ich habe den Wert von forks auf 20 gesetzt. Es wird nun eine Aufgabe an 20 Knoten parallel abarbeiten. Ebenso können Sie die Anzahl je nach Bedarf erhöhen/verringern.

Sie können den in ansible.cfg festgelegten Wert überschreiben Datei, indem Sie -f übergeben oder --forks Flagge. Wenn ich den folgenden Befehl ausführe, wird der Gabelwert von 20 durch 15 überschrieben.

$ ansible-playbook banner_mod.yml -f 15

Schlussfolgerung

In diesem Artikel haben wir gesehen, wie Ansible-Playbooks geschrieben werden und welche verschiedenen Parameter und Optionen in Playbooks unterstützt werden. Es gibt unzählige andere Funktionen wie Variablen, Bedingungen, Schleifen usw., die in Playbooks verwendet werden können, die wir in unseren nächsten Artikeln behandeln werden.


Linux
  1. Erste Schritte mit Zsh

  2. Erste Schritte mit ls

  3. Erste Schritte mit Samba für Interoperabilität

  4. Erste Schritte mit PostgreSQL unter Linux

  5. Erste Schritte mit SSH unter Linux

Erste Schritte mit dem Linux-Betriebssystem

Erste Schritte mit GitHub

Erste Schritte mit Ansible Ad-hoc-Befehlen

Erste Schritte mit Nix Package Manager

Erste Schritte mit systemctl

Erste Schritte mit dem Tar-Befehl