So erstellen Sie Ansible -Stücke und Playbooks - Teil 5

So erstellen Sie Ansible -Stücke und Playbooks - Teil 5

In diesem Teil 5 von Ansible -Serien werden wir erklären, wie man kreiert Ansible Stücke Und Spielbücher mit Ansible -Modulen.

Ansible Schiffe mit eigenständigen Skripten aufgerufen Module das werden in verwendet Spielbücher Für die Ausführung spezialisierter Aufgaben auf entfernten Knoten.

Module Gehen Sie zur Automatisierung von Aufgaben wie Paketverwaltung, Archivieren und Kopieren von Dateien, um nur einige zu erwähnen. Sie ermöglichen es Ihnen, Änderungen an Konfigurationsdateien vorzunehmen und Geräte wie Router, Switches, Ladung von Balancern, Firewalls und einer Vielzahl anderer Geräte zu verwalten.

Das Ziel dieses Subtopics ist es, Ihnen einen Überblick über verschiedene Aufgaben zu geben, die durch erledigt werden können Ansible Module:

Paketverwaltung unter Linux

Das Paketmanagement ist eine der wichtigsten und häufigsten Aufgaben, die von Systemadministratoren übernommen werden. Ansible -Schiffe mit Modulen, mit denen Sie beides in Paketverwaltungsaufgaben ausgeführt werden können Roter Hut Und Debian basierte Systeme.

Sie sind relativ leicht zu erraten. Dort ist der APT -Modul Für das APT -Paketmanagement für Debian basiert das alte Yum -Modul für Yum Package Management und DNF -Modul verbunden mit neueren RHEL -Verteilungen.

Im Folgenden finden Sie einige Beispiele, wie die Module in a verwendet werden können Spielbuch:

Beispiel 1: Installieren des Apache -Webservers auf RHEL 8

--- - Name: Installieren Sie Apache Webserver Hosts: Webservers Aufgaben: - Name: Installieren 

Beispiel 2: Installieren des Apache -Webservers auf Debian 10

--- - Name: Installieren Sie Apache Webserver Hosts: Datenbanken Aufgaben: - Name: Installieren 

Servicemodul

Mit dem Service -Modul können Systemadministratoren Dienste auf dem System starten, stoppen, aktualisieren, aktualisieren und neu laden.

Beispiel 1: Apache -Webserver starten

--- - Name: Start Service httpd, falls nicht gestarteter Service: Name: Httpd Status: Start 

Beispiel 2: APache -Webserver stoppen

--- - Name: Stop Service HTTPD Service: Name: Httpd Status: Stop 

Beispiel 3: Neustart einer Netzwerkschnittstelle ENP2S0 neu

--- - Name: Starten Sie den Netzwerkdienst für Schnittstellen -ETH0 -Service: Name: Netzwerkzustand: Neustarted Argums: ENP2S0 

Kopierenmodul

Wie der Name schon sagt, kopiert das Modul die Dateien von einem Speicherort auf der Remotemaschine an einen anderen Speicherort auf demselben Computer aus.

Beispiel 1: Kopieren von Dateien von lokal zu Remote Linux kopieren

--- - Name: Datei mit Eigentümer und Berechtigungen kopieren Kopieren: SRC:/etc/file/tecmint.conf dest: /srv /tecmint.Besitzer: Tecmint -Gruppe: Tecmint -Modus: '0644' 

Das Playbook kopiert die Konfigurationsdatei Tecmint.Conf aus /etc/Dateien/ Verzeichnis an /srv/ Verzeichnis als Tecmint Benutzer mit 0644 Berechtigungen.

Berechtigungen können auch unter Verwendung der symbolischen Darstellung dargestellt werden, wie in der letzten Zeile gezeigt.

Beispiel 2: Kopieren von Dateien von lokal zu Remote Linux kopieren

--- - Name: Datei mit Eigentümer und Berechtigungen kopieren Kopieren: SRC:/etc/file/tecmint.conf dest: /srv /tecmint.Besitzer des Besitzers: Tecmint -Gruppe: Tecmint -Modus: U = rw, g = r, o = r 

Die Berechtigungen im vorherigen Beispiel können wie in der letzten Zeile gezeigt dargestellt werden. Der Benutzer wird zugewiesen lesen Und schreiben Berechtigungen, der Gruppe wird Schreibberechtigungen zugewiesen und dem Rest der Welt werden Leserliteratur zugewiesen.

Dateimodul

Der Dateimodul wird verwendet, um viele Dateivorgänge zu tragen, einschließlich Dateien und Verzeichnissen, Zuweisung von Dateiberechtigungen und Einstellen von Symlinks.

Beispiel 1: Führen Sie Linux -Dateiberechtigungen durch

--- - Name: Ändern Sie die Dateibesitz-, Gruppen- und Berechtigungsdatei: Pfad: /etc /tecmint.Besitzer: Tecmint -Gruppe: Tecmint -Modus: '0644' 

Das obige Spiel erstellt eine Datei mit dem Namen Tecmint.Conf im /usw Verzeichniseinstellungsberechtigungen an 0644.

Beispiel 2: Linux -Datei löschen

--- - Name: Datei entfernen (Datei löschen) Datei: Pfad: /etc /tecmint.Conf State: Abwesend 

Dadurch wird die Datei entfernt oder gelöscht Tecmint.Conf.

Beispiel 3: Erstellen Sie ein Verzeichnis

--- - Name: Erstellen Sie ein Verzeichnis, wenn es keine Datei gibt: Pfad: /etc /myDirectory Status: Verzeichnismodus: '0777' 

Dies erstellt ein Verzeichnis in der /usw Verzeichniseinstellungsberechtigungen an 0777.

Beispiel 4: Löschen Sie ein Verzeichnis immer wieder

--- - Name: rekursiv eine Verzeichnisdatei löschen: Pfad: /etc /tecmint.Conf State: Abwesend 

Das obige Spiel löscht rekursiv ein Verzeichnis.

LineInfile -Modul

Der LineInfile Das Modul ist hilfreich, wenn Sie eine einzige Zeile in einer Datei ändern möchten. Es kann eine vorhandene Linie ersetzen.

Beispiel 1: Manipulieren Sie Dateien unter Linux

--- - Name: Stellen Sie sicher 

Das Spiel oben setzt Selinux Wert zu Behinderte.

Selinux = deaktiviert 

Beispiel 2: Ändern Sie Dateien unter Linux

--- - Name: Fügen Sie einer Datei eine Zeile hinzu, wenn die Datei nicht vorhanden ist, ohne Regexp LineInfile zu übergeben: Pfad: /etc /hosts Zeile: 10.200.50.51 Tecmint.com create: ja 

Dies fügt den Eintrag hinzu 10.200.50.51 Tecmint.com zum /etc/hosts Datei.

Archivmodul

Ein Archiv Modul wird zur Erstellung eines komprimierten Archivs einer einzelnen oder mehreren Dateien verwendet. Es geht davon aus, dass die Kompressionsquelle am Zielziel vorhanden ist. Nach der Archival kann die Quelldatei später mit der Anweisung gelöscht oder entfernt werden entfernen = true.

Beispiel 1: Erstellen Sie eine Archivdatei

- Name: Compress Directory/Pfad/to/tecmint_dir/in/path/to/tecmint.TGZ -Archiv: Pfad:/Pfad/to/tecmint_dir dest:/path/to/tecmint.TGZ Dies komprimiert das Verzeichnis/path/to/tecmint_dir zu/path/to/tecmint.TGZ 

Beispiel 2: Erstellen Sie eine Archivdatei und entfernen Sie

- Name: Komprimieren Sie die reguläre Datei/Pfad/to/tecmint in/path/to/foo.GZ und entfernen Sie es Archiv: Pfad:/Pfad/to/tecmint dest:/path/to/tecmint.TGZ entfernen: Ja 

Im obigen Spiel die Quelldatei /Pfad/to/tecmint wird nach Abschluss des Archivs gelöscht.

Beispiel 3: Erstellen einer Archivdatei

- Name: Erstellen Sie ein BZ2 -Archiv von/path/to/tecmint Archiv: Pfad:/Pfad/to/tecmint Format: BZ2 

Dies erstellt eine komprimierte Datei in BZ2 Format aus dem /Pfad/to/tecmint Datei.

Git -Modul

Das Modul verwaltet Git -Checkouts von Software -Repositories.

Beispiel 1: Überprüfen Sie die Git -Repositoires

- Git: Repo: 'https: // foosball.Beispiel.org/path/to/repo.Git 'dest: /srv /checkout Version: Release-0.22 

Befehlsmodul

Eines der am häufigsten verwendeten Module, die Befehl Das Modul nimmt den Befehlsnamen und später eine Liste von Argumenten an. Der Befehl ist ein Bestehen, wie Sie eine Linux -Shell eingeben würden.

Beispiel 1: Führen Sie einen Befehl aus

- Name: Ausführen eines Befehls mit dem Befehl des Befehlsmoduls: Cat HelloWorld.txt 

Beispiel 2: Überprüfung der Laufzeit von Remote Linux

--- - Name: Überprüfen Sie die Remote -Host -Uptime -Hosts: Server Aufgaben: - Name: Führen Sie den Befehl Uptime Over -Befehlsmodul Register: Uptimeoutput -Befehl aus: "Uptime" - Debug: VAR: UPTIMETPUTPUTPUT.stdout_lines 

Das Befehlsmodul ruft die Betriebszeit von Remote -Servern ab.

Variablen zum Abrufen der Ergebnisse der Auslaufbefehle

Normalerweise, Ansible Mit Playbooks werden Aufgaben auf verwalteten Hosts ausgeführt, ohne die Ausgabe in der Befehlszeile anzuzeigen. Es gibt jedoch Fälle, in denen Sie möglicherweise die Ausgabe oder Ergebnisse erfassen müssen. In diesem Abschnitt führen wir Sie durch, wie Sie die Ausgabe eines Spielbuchs in einer Variablen erfassen können und später anzeigen können.

Ein Ansible Register wird verwendet, um die Ausgabe einer Aufgabe zu erfassen und eine Variable zu speichern. Die Variable enthält anschließend die Stdout der Aufgabe.

Nehmen wir beispielsweise an, dass Sie die Verwendung von verwalteten Knoten in den jeweiligen Root -Verzeichnissen unter Verwendung der Datenträger überprüfen möchten df -th / Befehl. Sie werden die verwenden 'Befehl' Modul, um den Befehl zu definieren und 'registrieren' Um die STD -Ausgabe in einer Variablen zu speichern.

Um den Befehl anzuzeigen, verwenden Sie die 'debuggen' Modul neben dem StDout -Rückgabewert.

--- - Hosts: Alle werden: Ja -Aufgaben: - Name: Ausführen /Startnutzung auf dem Befehl hosts: 'df -th /' Register: df - Debug: var = df.Stdout 

Lassen Sie uns nun das Spielbuch durchführen. In diesem Fall haben wir unser Spielbuch benannt check_disk_space.YML.

# Ansible-Playbook check_disk_space.YML 
Überprüfen Sie die Verwendung von ansible verwalteten Knoten die Festplatte

Wie Sie gesehen haben, ist die Ausgabe durcheinander und macht es schwierig, mitzumachen.

Um die Ausgabe auszurichten und das Lesen zu erleichtern, ersetzen Sie das Stdout Rückgabewert mit stdout_lines.

--- - Hosts: Alle werden: Ja -Aufgaben: - Name: Ausführen /Startnutzung auf dem Befehl hosts: 'df -th /' Register: df - Debug: var = df.stdout_lines 

Verwenden Sie Bedingungen, um die Spielausführung zu steuern

Genau wie in Programmiersprachen, Bedingte Aussagen werden verwendet, wenn mehr als ein Ergebnis möglich ist. Schauen wir uns einige der häufig verwendeten bedingten Aussagen in ansiblen Playbooks an.

Wenn Aussage

Manchmal möchten Sie möglicherweise Aufgaben auf bestimmten Knoten und nicht auf anderen ausführen. Der 'Wenn' Die bedingte Aussage ist in einem Spielbuch ziemlich einfach zu bedienen und implementiert. Bei Verwendung der 'Wenn' Klausel deklarieren Sie einfach die Bedingung neben der Klausel wie gezeigt:

Wann: Zustand 

Wenn die Bedingung erfüllt ist, wird die Aufgabe am Fernsystem ausgeführt.

Schauen wir uns einige Beispiele an:

Beispiel 1: Verwenden Sie beim Bediener

--- - Hosts: Alle Aufgaben: - Name: Installieren Sie Nginx auf Debian APT: name = nginx state = vorhanden, wann: ansible_os_family == "Debian" 

Das oben genannte Spiel installiert Nginx Webserver auf Hosts, die die Debian -Familie der Distribos leiten.

Sie können auch die verwenden ODER Und UND Bediener neben der bedingten Aussage.

Beispiel 2: Verwenden und Bediener mit wann

--- - Hosts: Alle Aufgaben: - Name: Installieren Sie Nginx auf Debian APT: name = nginx state = vorhanden, wann: ansible_os_family == "Debian" und Ansible_Distribution_version == "18".04 ” 

Bei Verwendung der UND Der Betreiber, beide Aussagen müssen erfüllt sein, damit die Aufgabe ausgeführt wird.

Das oben genannte Stück installiert Nginx auf Knoten, die eine Debian -Familie von OS ausführen, die Version 18 ist.04. Offensichtlich wird dies Ubuntu 18 sein.04.

Beispiel 3: Verwenden oder Bediener mit wann

Mit ODER Operator wird die Aufgabe ausgeführt, wenn eine der Bedingungen erfüllt ist.

--- - Hosts: Alle Aufgaben: - Name: Installieren Sie Nginx auf Debian APT: name = nginx state = vorhanden, wann: ansible_os_family == "debian" oder ansible_os_family == "suse" 

Das oben genannte Stück installiert NGINX -Webserver entweder in der Debian- oder der SUSE -Familie von OS oder beiden.

NOTIZ: Stellen Sie immer sicher, dass Sie das doppelte Gleichstellungszeichen verwenden == Beim Testen eines Zustands.

Bedingungen in Schleifen

Bedingungen können auch in einer Schleife verwendet werden. Sagen Sie zum Beispiel, Sie haben eine Liste mehrerer Pakete, die auf Remote -Knoten installiert werden müssen.

Im Spielbuch unten haben wir ein Array namens Pakete enthält eine Liste von Paketen, die installiert werden müssen. Diese Aufgaben werden nacheinander durchgeführt, wenn die erforderlich Klausel ist auf WAHR.

--- - Name: Installieren Sie Softwarepakete Hosts: Alle VARs: Pakete: • Name: Nginx erforderlich: Richtig • Name: MySQL erforderlich: Richtig • Name: Apache erforderlich: falsche Aufgaben: • Name: Installation „item.Name ”auf Debian APT: Name:“ Element.Name ”Status: Präsentieren Sie wann: Element.Erforderlich == True Loop: "Pakete" 

Fehlerbehandlung konfigurieren

Manchmal scheitern Aufgaben beim Ausführen von Spielbüchern. Nehmen wir an, Sie führen 5 Aufgaben auf 3 Servern aus, wie im Spielbuch unten gezeigt. Wenn in Aufgabe 3 (Start MySQL) auf Server 2 ein Fehler auftritt.

--- - Name: Installieren Sie Softwarepakete Hosts: Server1, Server2, Server3 -Aufgaben: - Name: Installieren Sie Abhängigkeiten <> - Name: Installieren Sie die MySQL -Datenbank <> - Name: Starten Sie MySQL <> - Name: Installieren Sie Nginx <> - Name: Start Nginx <> 

Wenn Sie beispielsweise die Ausführung eines Spielbuchs in der Ausführung des Spielbuchs einhalten möchten, fügen Sie die Option fügen.

--- - Name: Installieren Sie Softwarepakete Hosts: Server1, Server2, Server3 Any_errors_fatal: true Aufgaben: 

Wenn eine Aufgabe auf einem Server fehlschlägt, stoppt Ansible die Ausführung des gesamten Playbooks auf allen Servern und dem Beenden.

Wenn Sie möchten, dass das Spielbuch die Fehler ignoriert und die verbleibenden Aufgaben ausführen soll, verwenden Sie die Ignore_errors: True Option.

--- - Name: Installieren Sie Softwarepakete Hosts: Server1, Server2, Server3 -Aufgaben: - Name: Installieren Sie Abhängigkeiten <>  Ignore_errors: Richtig 

Erstellen Sie Playbooks, um Systeme in einem bestimmten Zustand zu konfigurieren

In diesem Abschnitt sehen wir uns einige zusätzliche Optionen an, die beim Ausführen eines Spielbuchs verfügbar sind.

Beginnen wir mit dem Überprüfen Modus oder Probelauf Möglichkeit. Die Option Dry Run oder Check -Modus wird verwendet, wenn ein Spielbuch ausgeführt wird, um zu überprüfen, ob Fehler auftreten und ob Änderungen an den verwalteten Hosts vorgenommen werden. Es führt jedoch keine Änderungen an den entfernten Knoten vor.

Zum Beispiel zum Trocknen eines Spielbuchs namens httpd.YML Dadurch wird der Apache -Webserver -Auslauf installiert und gestartet:

# Ansible-Playbook Httpd.YML -Check 
Dry Run ein Ansible Playbook

Die andere Option, die wir uns ansehen müssen, ist die --Start-at-Task Möglichkeit. Dies wird verwendet, um den Namen der Aufgabe anzugeben, mit der das Spielbuch beginnen oder beginnen soll.

Nehmen wir ein Beispiel: Das Playbook unten zeigt 2 Aufgaben: Das erste Spiel installiert Apache Web Server und das zweite installiert das HTOP -Dienstprogramm.

--- - Name: Installieren Sie HTTPD -Hosts: Alle Aufgaben: yum: Name: httpd Status: Installiert - Name: Installieren Sie HTOP YUM: Name: HTOP -Status: Start 

Wenn Sie Apache Webserver installieren und stattdessen das HTOP -Dienstprogramm installieren möchten:

# Ansible-Playbook Playbook.YML-Start-at-Task "Installation HTOP" 
Installieren Sie Pakete mit Ansible Playbook

Zuletzt können Sie Ihre Aufgaben oder Theaterstücke markieren, indem Sie das hinzufügen Stichworte Option zu Ihrem Spielbuch wie gezeigt. Dies ist praktisch, wenn Sie ein ziemlich großes Spielbuch haben und bestimmte Aufgaben aus dem gesamten Spielbuch ausführen möchten.

--- - Name: Installieren Sie HTTPD Tags: Installieren und starten Sie Hosts: Alle Aufgaben: YUM: Name: HTTPD -Status: Installiert Tags: Installation • Service: Name: Httpd Status: Start 
# Ansible-Playbook Playbook.YML -Tages "Installation" 

Um die Tags wegzulassen, verwenden Sie die --Sprung-Tags Optionen wie gezeigt.

# Ansible-Playbook Playbook.YML--Skip-Tag "Installation" 
Abschluss

In diesem Thema haben wir Sie durch die häufig verwendeten Module in geführt Ansible, So rufen Sie Stdout aus der Ausführung eines Playbooks zur Analyse ab, verwenden Konditionals im Spielbuch und wie man Fehler verwaltet, die beim Ausführen von Aufgaben auftreten können. Zuletzt haben wir die Konfiguration von Playbooks und wie Sie zusätzliche Optionen verwenden, um zu entscheiden, welche Aufgaben ausgeführt werden sollen, wenn Sie nicht beabsichtigen, das gesamte Spielbuch auszuführen.