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

10 Ansible-Module für die Linux-Systemautomatisierung

Ansible ist eine vollständige Automatisierungslösung für Ihre IT-Umgebung. Mit Ansible können Sie die Linux- und Windows-Serverkonfiguration automatisieren, die Dienstbereitstellung orchestrieren, Cloud-Umgebungen bereitstellen und sogar Ihre Netzwerkgeräte konfigurieren.

Ansible-Module abstrahieren Aktionen auf Ihrem System, sodass Sie sich nicht um Implementierungsdetails kümmern müssen. Sie beschreiben einfach den gewünschten Zustand und Ansible sorgt dafür, dass das Zielsystem dazu passt.

Diese Modulverfügbarkeit ist einer der Hauptvorteile von Ansible, und es wird oft als Ansible mit „inklusive Batterien“ bezeichnet. Tatsächlich gibt es Module für eine Vielzahl von Aufgaben, und obwohl das großartig ist, höre ich häufig von Anfängern, dass sie nicht wissen, wo sie anfangen sollen.

Obwohl Ihre Wahl der Module ausschließlich von Ihren Anforderungen und dem, was Sie mit Ansible automatisieren möchten, abhängt, sind hier die zehn wichtigsten Module, die Sie für den Einstieg in Ansible für die Linux-Systemautomatisierung benötigen.

1. kopieren

Mit dem Kopiermodul können Sie eine Datei vom Ansible-Steuerknoten auf die Zielhosts kopieren. Zusätzlich zum Kopieren der Datei können Sie damit Eigentum, Berechtigungen und SELinux-Labels für die Zieldatei festlegen. Hier ist ein Beispiel für die Verwendung des Kopiermoduls zum Kopieren einer "Nachricht des Tages"-Konfigurationsdatei auf die Zielhosts:

- name:Stellen Sie sicher, dass die MOTD-Datei vorhanden ist
  copy:
    src:files/motd
    dest:/etc/motd
    owner:root
    group:Root
   -Modus:0644

Bei weniger komplexen Inhalten können Sie den Inhalt direkt in die Zieldatei kopieren, ohne eine lokale Datei zu haben, wie hier:

- Name:Stellen Sie sicher, dass die MOTD-Datei vorhanden ist
  Kopie:
    Inhalt:"Willkommen bei diesem System."
    Ziel:/etc/motd
    Eigentümer:root
    Gruppe:Root
   Modus:0644

Dieses Modul arbeitet idempotent, d. h. es kopiert die Datei nur, wenn dieselbe Datei nicht bereits mit demselben Inhalt und denselben Berechtigungen vorhanden ist.

Das Kopiermodul ist eine großartige Option, um eine kleine Anzahl von Dateien mit statischem Inhalt zu kopieren. Wenn Sie eine große Anzahl von Dateien kopieren müssen, werfen Sie einen Blick auf das Synchronisierungsmodul. Um Dateien mit dynamischem Inhalt zu kopieren, werfen Sie einen Blick auf die template Modul weiter.

2. Vorlage

Das Template-Modul funktioniert ähnlich wie das copy Modul, aber es verarbeitet Inhalte dynamisch unter Verwendung der Vorlagensprache Jinja2, bevor es auf die Zielhosts kopiert wird.

Definieren Sie beispielsweise eine Vorlage "Nachricht des Tages", die den Namen des Zielsystems anzeigt, wie folgt:

$ vi templates/motd.j2
Willkommen bei {{ Inventory_Hostname }}.

Instanziieren Sie dann diese Vorlage mit template Modul, etwa so:

- name:Stellen Sie sicher, dass die MOTD-Datei vorhanden ist
  template:
    src:templates/motd.j2
    dest:/etc/motd
    owner:root
Gruppe:Root
   Modus:0644

Vor dem Kopieren der Datei verarbeitet Ansible die Vorlage, interpoliert die Variable und ersetzt sie durch den Namen des Zielhostsystems. Beispiel:Der Zielsystemname ist rh8-vm03 , die Ergebnisdatei ist:

Willkommen bei rh8-vm03.

Während das copy Modul kann auch Variablen interpolieren, wenn es den content verwendet Parameter, die template -Modul ermöglicht zusätzliche Flexibilität durch das Erstellen von Vorlagendateien, mit denen Sie komplexere Inhalte definieren können, einschließlich for Schleifen, if Bedingungen und mehr. Eine vollständige Referenz finden Sie in der Jinja2-Dokumentation.

Dieses Modul ist auch idempotent und kopiert die Datei nicht, wenn der Inhalt auf dem Zielsystem bereits mit dem Inhalt der Vorlage übereinstimmt.

3. Benutzer

Das Benutzermodul ermöglicht Ihnen das Anlegen und Verwalten von Linux-Benutzern in Ihrem Zielsystem. Dieses Modul hat viele verschiedene Parameter, aber in seiner grundlegendsten Form können Sie es verwenden, um einen neuen Benutzer zu erstellen.

Zum Beispiel, um den Benutzer ricardo zu erstellen mit UID 2001, Teil der Gruppen users und wheel und das Passwort mypassword , wenden Sie den user an Modul mit diesen Parametern:

- Name:Sicherstellen, dass Benutzer ricardo existiert
  Benutzer:
    Name:ricardo
    Gruppe:Benutzer
    Gruppen:Rad
    uid:2001
    Passwort:"{{ 'mypassword' | password_hash('sha512') }}"
    Status:vorhanden

Beachten Sie, dass dieses Modul versucht, idempotent zu sein, dies jedoch nicht für alle seine Optionen garantieren kann. Wenn Sie beispielsweise das vorherige Modulbeispiel erneut ausführen, wird das Kennwort auf den definierten Wert zurückgesetzt, wodurch der Benutzer im System für jede Ausführung geändert wird. Um dieses Beispiel idempotent zu machen, verwenden Sie den Parameter update_password: on_create , um sicherzustellen, dass Ansible das Passwort nur beim Erstellen des Benutzers und nicht bei nachfolgenden Ausführungen festlegt.

Sie können dieses Modul auch verwenden, um einen Benutzer zu löschen, indem Sie den Parameter state: absent setzen .

Der user Das Modul bietet Ihnen viele Optionen, um mehrere Benutzeraspekte zu verwalten. Weitere Informationen finden Sie in der Moduldokumentation.

4. Paket

Das Paketmodul ermöglicht es Ihnen, Softwarepakete mithilfe des Standardpaketmanagers des Betriebssystems zu installieren, zu aktualisieren oder von Ihrem Zielsystem zu entfernen.

Um beispielsweise den Apache-Webserver auf einem Red Hat Linux-Rechner zu installieren, wenden Sie das Modul wie folgt an:

- Name:Stellen Sie sicher, dass das Apache-Paket installiert ist
  Paket:
    Name:httpd
    Status:vorhanden

Mehr zu Ansible

  • Eine Schnellstartanleitung für Ansible
  • Ansible-Spickzettel
  • Kostenloser Online-Kurs:Grundlagen von Ansible
  • Ansible herunterladen und installieren
  • eBook:Das automatisierte Unternehmen
  • eBook:Ansible für DevOps
  • Kostenlose Ansible-eBooks
  • Neueste Ansible-Artikel

Dieses Modul ist verteilungsunabhängig und funktioniert unter Verwendung des zugrunde liegenden Paketmanagers, wie z. B. yum/dnf für Red Hat-basierte Distributionen und apt für Debian. Aus diesem Grund werden nur grundlegende Aufgaben wie das Installieren und Entfernen von Paketen ausgeführt. Wenn Sie mehr Kontrolle über die Optionen des Paketmanagers benötigen, verwenden Sie das spezifische Modul für die Zieldistribution.

Denken Sie auch daran, dass, obwohl das Modul selbst auf verschiedenen Distributionen funktioniert, der Paketname für jede unterschiedlich sein kann. Bei Red Hat-basierten Distributionen lautet der Paketname des Apache-Webservers beispielsweise httpd , während es in Debian apache2 ist . Stellen Sie sicher, dass Ihre Playbooks damit umgehen.

Dieses Modul ist idempotent und reagiert nicht, wenn der aktuelle Systemzustand mit dem gewünschten Zustand übereinstimmt.

5. Dienst

Verwenden Sie das Dienstmodul, um die Dienste des Zielsystems mit dem erforderlichen Init-System zu verwalten; zum Beispiel systemd.

In seiner einfachsten Form müssen Sie lediglich den Dienstnamen und den gewünschten Status angeben. Zum Beispiel, um sshd zu starten verwenden Sie das Modul wie folgt:

- Name:Stellen Sie sicher, dass SSHD gestartet ist
  Dienst:
    Name:sshd
    Status:gestartet

Sie können auch sicherstellen, dass der Dienst automatisch gestartet wird, wenn das Zielsystem hochfährt, indem Sie den Parameter enabled: yes angeben .

Wie beim package Modul, der service Modul ist flexibel und funktioniert über verschiedene Distributionen hinweg. Wenn Sie eine Feinabstimmung über das spezifische Ziel-Init-System benötigen, verwenden Sie das entsprechende Modul; zum Beispiel das Modul systemd .

Ähnlich wie bei den anderen Modulen, die Sie bisher gesehen haben, der service Modul ist auch idempotent.

6. Firewalld

Verwenden Sie das Modul firewalld, um die System-Firewall mit firewalld zu steuern Daemon auf Systemen, die ihn unterstützen, wie z. B. Red Hat-basierte Distributionen.

Um beispielsweise den HTTP-Dienst auf Port 80 zu öffnen, verwenden Sie ihn wie folgt:

- Name:Stellen Sie sicher, dass Port 80 (http) geöffnet ist
  firewalld:
    Dienst:http
    Status:aktiviert
    permanent:ja
    sofort:ja

Sie können auch benutzerdefinierte Ports anstelle von Dienstnamen mit dem port angeben Parameter. Geben Sie in diesem Fall auch das Protokoll an. Um beispielsweise den TCP-Port 3000 zu öffnen, verwenden Sie Folgendes:

- Name:Stellen Sie sicher, dass Port 3000/TCP offen ist
  firewalld:
    Port:3000/tcp
    Status:aktiviert
    dauerhaft:ja
    sofort:ja

Sie können dieses Modul auch verwenden, um andere firewalld zu steuern Aspekte wie Zonen oder komplexe Regeln. Überprüfen Sie unbedingt die Dokumentation des Moduls auf eine umfassende Liste der Optionen.

7. Datei

Mit dem Dateimodul können Sie den Status von Dateien und Verzeichnissen steuern und Berechtigungen, Eigentumsrechte und SELinux-Labels festlegen.

Verwenden Sie zum Beispiel die file Modul zum Erstellen eines Verzeichnisses /app gehört dem Benutzer ricardo , mit Lese-, Schreib- und Ausführungsberechtigungen für den Besitzer und die Gruppe users :

- Name:Stellen Sie sicher, dass das Verzeichnis /app existiert
  Datei:
    Pfad:/app
    Status:Verzeichnis
    Eigentümer:ricardo
    Gruppe:Benutzer
Modus:0770

Sie können dieses Modul auch verwenden, um Dateieigenschaften für Verzeichnisse rekursiv festzulegen, indem Sie den Parameter recurse: yes verwenden oder löschen Sie Dateien und Verzeichnisse mit dem Parameter state: absent .

Dieses Modul arbeitet für die meisten seiner Parameter mit Idempotenz, aber einige von ihnen können dazu führen, dass es den Zielpfad jedes Mal ändert. Weitere Einzelheiten finden Sie in der Dokumentation.

8. lineinfile

Mit dem lineinfile-Modul können Sie einzelne Zeilen in bestehenden Dateien verwalten. Es ist nützlich, die gezielte Konfiguration vorhandener Dateien zu aktualisieren, ohne den Rest der Datei zu ändern oder die gesamte Konfigurationsdatei zu kopieren.

Fügen Sie Ihrer hosts-Datei beispielsweise einen neuen Eintrag wie diesen hinzu:

- Name:Host rh8-vm03 in Hosts-Datei sicherstellen
  lineinfile:
    path:/etc/hosts
    line:192.168.122.236 rh8-vm03
    state:present

Sie können dieses Modul auch verwenden, um eine bestehende Zeile zu ändern, indem Sie den Parameter regexp anwenden um nach einer bestehenden Leitung zu suchen, die ersetzt werden soll. Aktualisieren Sie beispielsweise sshd_config Datei, um die Root-Anmeldung zu verhindern, indem Sie die Zeile PermitRootLogin yes ändern auf PermitRootLogin no :

- name:Stellt sicher, dass sich Root nicht über ssh anmelden kann
  lineinfile:
    path:/etc/ssh/sshd_config
    regexp:'^PermitRootLogin'
    line:PermitRootLogin no
    Status:vorhanden

Hinweis:Verwenden Sie das Dienstmodul, um den SSHD-Dienst neu zu starten, um diese Änderung zu aktivieren.

Dieses Modul ist ebenfalls idempotent, aber stellen Sie im Falle einer Zeilenänderung sicher, dass der reguläre Ausdruck sowohl dem ursprünglichen als auch dem aktualisierten Zustand entspricht, um unnötige Änderungen zu vermeiden.

9. unarchivieren

Verwenden Sie das Unarchive-Modul, um den Inhalt von Archivdateien wie tar zu extrahieren oder zip Dateien. Standardmäßig kopiert es die Archivdatei vor dem Extrahieren vom Kontrollknoten auf die Zielmaschine. Ändern Sie dieses Verhalten, indem Sie den Parameter remote_src: yes bereitstellen .

Extrahieren Sie beispielsweise den Inhalt einer .tar.gz Datei, die bereits mit dieser Syntax auf den Zielhost heruntergeladen wurde:

- name:Inhalt von app.tar.gz extrahieren
  unarchive:
    src:/tmp/app.tar.gz
    dest:/app
    remote_src:yes

Einige Archivierungstechnologien erfordern zusätzliche Pakete, die auf dem Zielsystem verfügbar sind; zum Beispiel das Paket unzip um .zip zu extrahieren Dateien.

Abhängig vom verwendeten Archivformat kann dieses Modul idempotent funktionieren oder nicht. Um unnötige Änderungen zu vermeiden, können Sie den Parameter creates verwenden um eine Datei oder ein Verzeichnis anzugeben, das dieses Modul beim Extrahieren des Archivinhalts erstellen würde. Wenn diese Datei oder dieses Verzeichnis bereits existiert, extrahiert das Modul den Inhalt nicht erneut.

10. Befehl

Das Befehlsmodul ist ein flexibles Modul, mit dem Sie beliebige Befehle auf dem Zielsystem ausführen können. Mit diesem Modul können Sie fast alles auf dem Zielsystem machen, solange es einen Befehl dafür gibt.

Obwohl der command Modul flexibel und leistungsfähig ist, sollte es mit Vorsicht verwendet werden. Vermeiden Sie die Verwendung des Befehlsmoduls zum Ausführen einer Aufgabe, wenn dafür ein anderes geeignetes Modul verfügbar ist. Zum Beispiel könnten Sie Erstellen Sie Benutzer mit dem command Modul zum Ausführen von useradd Befehl, aber Sie sollten Verwenden Sie den user Modul, da es viele Details von Ihnen abstrahiert, sich um Sonderfälle kümmert und sicherstellt, dass sich die Konfiguration nur bei Bedarf ändert.

Für Fälle, in denen keine Module verfügbar sind, oder um benutzerdefinierte Skripte oder Programme auszuführen, verwenden Sie den command Modul ist immer noch eine großartige Ressource. Verwenden Sie beispielsweise dieses Modul, um ein Skript auszuführen, das bereits auf dem Zielcomputer vorhanden ist:

- name:Führen Sie den App-Installer
 -Befehl aus:"/app/install.sh"

Standardmäßig ist dieses Modul nicht idempotent, da Ansible den Befehl jedes Mal ausführt. Um den command zu machen Modul idempotent, Sie können when verwenden Bedingungen, um den Befehl nur auszuführen, wenn die entsprechende Bedingung vorhanden ist, oder der creates -Argument, ähnlich wie im Beispiel des Unarchive-Moduls.

Was kommt als nächstes?

Mit diesen Modulen können Sie ganze Linux-Systeme konfigurieren, indem Sie Konfigurationsdateien kopieren, erstellen oder ändern, Benutzer erstellen, Pakete installieren, Systemdienste starten, die Firewall aktualisieren und vieles mehr.

Wenn Sie neu bei Ansible sind, lesen Sie unbedingt die Dokumentation zum Erstellen von Playbooks, um diese Module zu kombinieren und Ihr System zu automatisieren. Einige dieser Aufgaben müssen mit erhöhten Rechten ausgeführt werden, damit sie funktionieren. Weitere Einzelheiten finden Sie in der Dokumentation zur Berechtigungsausweitung.

Ab Ansible 2.10 sind Module in Sammlungen organisiert. Die meisten Module in dieser Liste sind Teil der ansible.builtin Sammlung und sind standardmäßig mit Ansible verfügbar, aber einige von ihnen sind Teil anderer Sammlungen. Eine Liste der Sammlungen finden Sie in der Ansible-Dokumentation.


Linux
  1. Wie ich Ansible und Anacron für die Automatisierung verwende

  2. Was ist Linux? Ein Leitfaden für nicht-technische Benutzer

  3. 8 Tipps für eine zuverlässige Linux-Systemautomatisierung

  4. 3 Schritte zur Identifizierung von Kandidaten für die Linux-Systemautomatisierung

  5. Ist das Entwickeln/Testen eines Linux-Moduls mit einer virtuellen Maschine sicher?

Kurzanleitung zu Ansible für Linux-Systemadministratoren

Die 15 besten Linux-Emulatoren für Windows-Systeme

Die 20 besten Bioinformatik-Tools für Linux-Systeme

Top 10 der besten Geometriesoftware für Linux-Systeme

Top 15 der besten Biologie-Tools für Linux-Systeme

15 beste Videobearbeitungssoftware für Linux-Systeme