Ansible ist ein weit verbreitetes Automatisierungstool, das Hunderte von Knoten auf einmal verwalten kann. Ansible verfügt über viele großartige Funktionen, eine davon ist die Möglichkeit, eine einzelne Zeile innerhalb einer Datei auf entfernten Knoten mithilfe des Ansible lineinfile-Moduls zu verwalten.
Das Ansible lineinfile-Modul ist ein Modul, das verschiedene Aktionen auf einer einzelnen Zeile in einer Datei ausführt, wie das Ersetzen einer Zeile, das Aktualisieren einer Zeile oder das Hinzufügen einer bestimmten Zeile.
In diesem Tutorial lernen Sie, was das Ansible lineinfile-Modul ist, wie es funktioniert und wie Sie es verwenden können, um Textdateien zu verwalten.
Voraussetzungen
Dieser Beitrag wird ein schrittweises Tutorial zum Ansible lineinfile-Modul sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie folgendes bereit haben:
- Einen Ansible-Controller-Host – Dieses Tutorial verwendet Ansible v2.9.24 auf einem Ubuntu 18.04.5 LTS-Rechner.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- Apache sollte bereits auf dem entfernten Computer installiert sein, wenn Sie genau dem Tutorial folgen möchten.
Modifizieren einer Textdatei mit dem Ansible lineinfile-Modul.
Beginnen wir dieses Tutorial, indem wir das Ansible lineinfile-Modul mit Ad-hoc-Befehlen ausführen. Ad-hoc-Befehle sind eine schnelle Möglichkeit, einen einzelnen Befehl auf einem Remote-Host zu testen oder auszuführen.
Melden Sie sich auf Ihrem Ansible-Controller an und führen Sie den folgenden Befehl aus. Dieser Befehl verwendet das lineinfile-Modul (-m
), um eine Verbindung mit der Webmaschine herzustellen und ein Argument (-a
) zu übergeben, das der auszuführende Befehl ist.
In diesem Fall aktualisiert das lineinfile-Modul den Eintrag für localhost, indem es die IP-Adresse 127.0.0.1
mit myapache
in der Datei /etc/hosts verknüpft. Durch die Verknüpfung von 127.0.0.1
mit myapache
können Sie lokal auf die Apache-Testseite unter HTTP://myapache:80 zugreifen.
path
gibt den Dateispeicherort an.regexp
findet den regulären Ausdruck, falls vorhanden, in der Datei und aktualisiert ihn mit127.0.0.1 myapache
, wie imline
-Parameter angegeben.- Die
--become
-Flag ermöglicht das Ausführen des Befehls als privilegierter Benutzer. - Die
web
-Gruppe ist eine Sammlung aller Server im Inventar. ansible.builtin.lineinfile
oder einfach lineinfile ist der Modulname.
Nach Ausführung des Befehls sollten Sie eine CHANGED-Meldung sehen, die bestätigt, dass die Zeile erfolgreich auf dem Remote-Host aktualisiert wurde.

Melden Sie sich mit einem SSH-Client an der Remote-Knoten an und überprüfen Sie mit dem cat
-Befehl, ob die Datei /etc/hosts mit dem neuen Wert aktualisiert wurde.
Wie unten gezeigt, wurde der Eintrag für localhost erfolgreich mit 127.0.0.1 myapache
auf dem Remote-Rechner aktualisiert.

Ändern mehrerer Textdateien in einem Playbook
Es ist möglicherweise in Ordnung, mit einem einzelnen Ad-hoc-Befehl Zeilen auf einem Remote-Rechner zu verwalten, aber es wird schwierig, wenn Sie Zeilen in mehreren Dateien oder mehrere Zeilen in einer Datei verwalten müssen. Verwenden Sie anstelle von Ad-hoc-Befehlen den Ansible lineinfile-Modul innerhalb des Playbooks mit dem ansible-playbook-Befehl.
Jetzt lernen wir, wie man das Ansible lineinfile-Modul innerhalb des Playbooks verwendet und einige Zeilen ändert.
Angenommen, Sie sind bereits am Ansible-Controller-Host angemeldet:
1. Erstellen Sie ein Verzeichnis namens ansible_lineinfile_module_demo in Ihrem Home-Verzeichnis. Dieses Verzeichnis enthält das Playbook, das Sie verwenden werden, um das lineinfile-Modul aufzurufen.
2. Erstellen Sie eine weitere Datei mit dem Namen my_playbook.yml im Verzeichnis ~/ansible_lineinfile_module_demo und fügen Sie den folgenden YAML-Playbook-Inhalt ein. Dieses Playbook enthält mehrere Aufgaben, die das Ansible lineinefile
-Modul verwenden, um Zeilen verschiedener Konfigurationsdateien für Apache auf der Remote-Maschine zu verwalten.
Das unten stehende Playbook enthält die folgenden Aufgaben:
1. Überprüft, ob ADMIN
in der Datei /etc/sudoers vorhanden ist. Wenn nicht, fügt die Aufgabe es hinzu.
2. Stellt sicher, dass Apache standardmäßig auf Port 8080 hört, innerhalb der Datei /etc/apache2/ports.conf; falls es eine andere Portzeile findet, aktualisiert das lineinfile-Modul sie auf den Port 8080
. Ebenso unter /etc/apache2/apache2.conf aktualisiert es MaxKeepAliveRequests
auf 1000 und KeepAliveTimeout
auf 100.
3. Fügt die Zeile mit dem Text „Hello This is my Apache Page“ am Ende der Datei index.html
auf dem Remote-Server im Verzeichnis /var/www/html hinzu.
Ansible-Playbooks sind in YAML geschrieben. Um mehr über YAML zu erfahren, klicken Sie hier
3. Jetzt das Playbook aufrufen und die Aufgaben mit dem Befehl ansible-playbook
ausführen, um alle im Playbook definierten Zeilen auf dem Remote-Host hinzuzufügen oder zu aktualisieren.

Hier unten sehen Sie, dass die AUFGABE den Status geändert hat, was bedeutet, dass der Remote-Host nicht im richtigen Zustand war und geändert wurde, um den Befehl auszuführen. Für die AUFGABE, die den OK-Status hat, zeigt dies, dass keine Änderungen erforderlich sind.
4. Als nächstes melden Sie sich mit Ihrem bevorzugten SSH-Client beim Remote-Host an.
5. Überprüfen Sie abschließend mit dem Befehl cat
, ob alle im my_playbook.yml definierten Zeilen auf dem Remote-Host aktualisiert oder hinzugefügt wurden.
Das untenstehende Bild bestätigt, dass der admin
bereits in der sudoers-Datei hinzugefügt wurde.

Erneut bestätigt das untenstehende Bild, dass Apache standardmäßig auf Port 8080
hört.

Abschließend überprüfen Sie, ob MaxKeepAliveRequests
und KeepAliveTimeout
auf 1000 bzw. 100 aktualisiert wurden.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file Schlussfolgerung
Das Ansible lineinfile-Modul ist eine großartige Möglichkeit, Textdateien auf entfernten Hosts zu ändern. Das Modul bietet eine großartige Möglichkeit, Zeilen in Textdateien innerhalb Ihrer Playbooks hinzuzufügen, zu entfernen und zu ändern.
Welche anderen Anwendungsfälle sehen Sie, die vom Ansible lineinfile-Modul profitieren könnten?