Advertisements

10 Ansible-Module für die Linux-Systemautomatisierung

Ansible ist eine vollständige Automatisierungslösung für Ihre IT-Umgebung. Sie können Ansible verwenden, um die Linux- und Windows-Serverkonfiguration zu automatisieren, die Dienstbereitstellung zu orchestrieren, Cloud-Umgebungen bereitzustellen und sogar Ihre Netzwerkgeräte zu 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: Ensure MOTD file is in place
  copy:
    src: files/motd
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

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

- name: Ensure MOTD file is in place
  copy:
    content: "Welcome to this system."
    dest: /etc/motd
    owner: root
    group: root
    mode: 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 mit 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
Welcome to {{ inventory_hostname }}.

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

- name: Ensure MOTD file is in place
  template:
    src: templates/motd.j2
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

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

Welcome to rh8-vm03.

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

Dieses Modul ist ebenfalls 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 zu erstellen ricardo mit UID 2001, Teil der Gruppen users und wheel, und Passwort mypassword, Wende an user Modul mit diesen Parametern:

- name: Ensure user ricardo exists
  user:
    name: ricardo
    group: users
    groups: wheel
    uid: 2001
    password: "{{ 'mypassword' | password_hash('sha512') }}"
    state: present

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 Läufen festlegt.

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

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 Ihnen das Installieren, Aktualisieren oder Entfernen von Softwarepaketen auf Ihrem Zielsystem mithilfe des Standardpaketmanagers des Betriebssystems.

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

- name: Ensure Apache package is installed
  package:
    name: httpd
    state: present

Mehr zu Ansible

Dieses Modul ist verteilungsunabhängig und funktioniert mit dem zugrunde liegenden Paketmanager, z 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 ist apache2. 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 zum Starten der sshd verwenden Sie das Modul wie folgt:

- name: Ensure SSHD is started
  service:
    name: sshd
    state: started

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

Wie bei der package Modul, das 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, ist die service Modul ist auch idempotent.

6. Firewalld

Verwenden Sie das Modul firewalld, um die System-Firewall mit dem zu steuern firewalld 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: Ensure port 80 (http) is open
  firewalld:
    service: http
    state: enabled
    permanent: yes
    immediate: yes

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

- name: Ensure port 3000/TCP is open
  firewalld:
    port: 3000/tcp
    state: enabled
    permanent: yes
    immediate: yes

Sie können dieses Modul auch verwenden, um andere zu steuern firewalld 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 Eigentum des Benutzers ricardo, mit Lese-, Schreib- und Ausführungsberechtigungen für den Eigentümer und die Gruppe users:

- name: Ensure directory /app exists
  file:
    path: /app
    state: directory
    owner: ricardo
    group: users
    mode: 0770

Sie können dieses Modul auch verwenden, um Dateieigenschaften für Verzeichnisse rekursiv festzulegen, indem Sie den Parameter verwenden recurse: yes 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. Zeilendatei

Mit dem lineinfile-Modul können Sie einzelne Zeilen in bestehenden Dateien verwalten. Es ist nützlich, die Zielkonfiguration für vorhandene 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: Ensure host rh8-vm03 in hosts file
  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 anwenden regexp um nach einer bestehenden Leitung zu suchen, die ersetzt werden soll. Aktualisieren Sie beispielsweise die sshd_config Datei, um die Root-Anmeldung durch Ändern der Zeile zu verhindern PermitRootLogin yes zu PermitRootLogin no:

- name: Ensure root cannot login via ssh
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^PermitRootLogin'
    line: PermitRootLogin no
    state: present

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 z tar 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 angeben remote_src: yes.

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

- name: Extract contents of app.tar.gz
  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 extrahieren .zip Dateien.

Abhängig vom verwendeten Archivformat kann dieses Modul idempotent funktionieren oder nicht. Um unnötige Änderungen zu vermeiden, können Sie den Parameter verwenden creates 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 tun, solange es einen Befehl dafür gibt.

Obwohl die 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 Sie könnten Erstellen Sie Benutzer mithilfe von command Modul zum Ausführen der useradd Befehl, aber Sie sollen benutze die 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, kann die 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: Run the app installer
  command: "/app/install.sh"

Standardmäßig ist dieses Modul nicht idempotent, da Ansible den Befehl jedes Mal ausführt. Das zu machen command Modul idempotent, können Sie verwenden when Bedingungen, um den Befehl nur auszuführen, wenn die entsprechende Bedingung vorliegt, oder die 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 Rechteausweitung.

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.

10 Ansible-Module für die Linux-Systemautomatisierung

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top