Ansible Lineinfile Modul mit Regexp Beispielen

Ansible lineinfile Modul wird verwendet, um neue Zeilen am Ende der Datei oder irgendwo in der Datei einzufügen. Mit dem ansible lineinfile Modul können wir bestehende Zeilen aus der Datei entfernen und ersetzen. In den folgenden Beispielen zeige ich euch, wie man das Modul ansible lineinfile mit verschiedenen Parametern wie regexpto verwendet, um neue Zeilen einzufügen.

Craete neue Datei und füge eine Zeile hinzu:

# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible lineinfile mdoule. lineinfile: path: /project/devops/abc.txt line: decodingdevops talks about all the devops tools state: present create: yes

Im lineinfile-Modul können wir je nach Anforderung verschiedene Parameter verwenden. Hier habe ich den Parameter ‚path‘ verwendet, der dem lineinfile mitteilt, welche Datei es ändern soll. Im Parameter path sollten wir also den Pfad der Datei angeben, die wir ändern wollen. Im line Parameter müssen wir die Zeile hinzufügen, die in die Datei eingefügt werden soll. Um die Zeile zur Datei hinzuzufügen, sollten wir den Parameter state als vorhanden angeben. Create Parameter mit yes, wir haben die Datei erstellt, wenn die Datei nicht existiert.

Was macht dieses Playbook

Es wird eine neue Datei erstellt und die Zeile wird der Datei hinzugefügt. Wenn Sie das Playbook erneut ausführen, werden keine Änderungen an der Datei vorgenommen, da lineinfile die Zeile hinzufügt, wenn die Zeile nicht vorhanden ist. Wenn die Zeile bereits vorhanden ist, wird sie nicht erneut hinzugefügt.

wenn Sie den Parameter create entfernen und das Playbook ausführen. Die Datei muss im definierten Pfad vorhanden sein, sonst wird eine Fehlermeldung wie

fatal: : FAILED! => {„changed“: false, „msg“: „Destination /project/devops/abc.txt does not exist !“, „rc“: 257}

If The File is Already Existed:

wenn die Datei bereits existiert, wird sie an das Ende der Datei angehängt.

Ansible Lineinfile mit Regexp Beispiel:

---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' line: 'hello devops' state: present backrefs: yes 

Regexp wird verwendet, um eine bestimmte Zeile in der Datei zu ändern. Hier haben wir im Regexp-Parameter ‚^devops‘ angegeben. Das bedeutet, dass die Zeile, die mit docker gestartet wurde, mit der Zeile ‚hello devops‘ in der Datei geändert werden muss. wir sollten Backrefs als yes angeben. Backrefs yes ersetzt die Zeile mit ‚hello devops‘ nur, wenn in der Datei eine regexp-Zeile (^docker) gefunden wird. Wenn es keine Zeile gibt, die mit „docker“ beginnt, wird nichts in der Datei geändert, die Datei wird unverändert gelassen.

Standardmäßig ist backrefs der Wert no, wenn Sie also backrefs in der Aufgabe nicht erwähnt haben, wird es wie ‚backref: no‘

Was passiert, wenn Sie backrefs nicht erwähnt haben: oder

wenn Sie backrefs nicht als yes erwähnt haben, und wenn es keine mit docker gestartete Zeile gibt, wird die Zeile trotzdem am Ende der Datei hinzugefügt. Wenn Sie das Playbook mehrere Male ausführen, wird die Zeile so oft hinzugefügt. Um dieses Problem zu vermeiden, sollten Sie backref als yes angeben.

Eine Zeile nach/vor einer bestimmten Zeile hinzufügen:

Wenn man eine Zeile nach/vor einer bestimmten Zeile hinzufügen möchte, kann man den insertafter/insertbefore Parameter im ansible lineinfile Modul verwenden.

# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'

Hier wird die ‚hello devops‘ Zeile nach der Zeile hinzugefügt, die mit docker gestartet wurde.

Wenn Sie die Zeile vor der mit Docker gestarteten Zeile hinzufügen möchten, können Sie insertbefore eingeben.

Entfernen Sie eine Zeile mit Ansible regexp

# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' state: absent

Hier wird die mit Docker gestartete Zeile entfernt. Um die Zeile mit regexp in Ansible zu entfernen, sollten wir den Parameter state als abwesend verwenden.

In den obigen Beispielen haben wir über die Zeile, die mit begonnen hat, gesprochen, da ich das Symbol (^) erwähnt habe. Dieses Symbol steht für die ‚Zeile beginnt mit‘, wenn du mehr verschiedene Optionen wissen willst, solltest du Python regexp lernen.

https://docs.python.org/2/library/re.html

Leave a Reply