Ansible Lineinfile Module With Regexp Examples

Ansible lineinfile module används för att infoga nya rader i slutet av filen eller någonstans i filen. Med ansible lineinfile-modulen kan vi ta bort befintliga rader från filen och vi kan ersätta raderna. I följande exempel kommer jag att visa hur man använder ansible lineinfile-modulen med olika parametrar som regexpto för att infoga nya rader.

Craete ny fil och lägga till en rad:

# 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

I modulen lineinfile kan vi använda olika parametrar beroende på våra krav. Här använde jag parametern ”path”, path-parametern talar om för lineinfile till vilken fil den ska ändra Så i path-parametern bör vi nämna sökvägen till den fil som vi ska ändra. I line-parametern måste vi lägga till den rad som ska läggas till i filen. För att lägga till raden i filen bör vi nämna state-parametern som närvarande. Create parameter med yes, vi använde för att skapa filen om filen inte finns.

vad gör denna playbook

den kommer att skapa en ny fil och den kommer att lägga till raden i filen. Om du kör playbooken igen kommer inga ändringar att ske i filen eftersom lineinfile kommer att lägga till raden om raden inte finns. Om raden redan finns kommer den inte att lägga till den raden igen.

Om du tar bort parametern create och om du kör playbooken. Du måste ha filen som finns i den definierade sökvägen, annars kommer du att få ett fel som

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

Om filen redan finns:

Om filen redan finns kommer den att läggas till i slutet av filen.

Ansible Lineinfile With Regexp Example:

---- 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 används för att ändra en viss rad i filen. Här nämnde vi i regexp-parametern som ”^devops”. det betyder att raden som startas med docker måste ändras med raden ”hello devops” i filen. vi bör nämna backrefs som ja. Backrefs yes kommer att ersätta raden med ”hello devops” endast om det finns en regexp-linje (^docker) i filen. Om det inte finns någon rad som börjar med docker kommer det inte att ändra något i filen, filen kommer att lämnas oförändrad.

Som standard är backrefs-värdet no, så om du inte har nämnt backrefs i uppgiften kommer den att anta som ”backref: no”

Vad kommer att hända om du inte har nämnt backrefs: eller

Om du inte har nämnt backrefs som yes, och om det inte finns någon rad som startats med docker, kommer raden ändå att läggas till i slutet av filen. Om du kör spelboken flera gånger kommer raden att läggas till det antalet gånger. För att undvika detta problem bör du ange backref som yes.

Lägg till en rad efter/för en viss rad:

Om du vill lägga till en rad efter/för en viss rad kan du använda parametern insertafter/insertbefore i modulen ansible lineinfile.

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

Här läggs raden ”hello devops” till efter den rad som startats med docker.

Om du vill lägga till raden före den rad som startats med docker kan du sätta insertbefore.

Ta bort en rad med hjälp av 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

Här kommer den att ta bort den rad som startats med docker. För att ta bort raden med hjälp av regexp i ansible bör vi använda state-parametern som absent.

I alla ovanstående exempel diskuterade vi om raden startade med, eftersom jag nämnde symbolen(^). Denna symbol representerar ”line starting with”, om du vill veta fler olika alternativ bör du lära dig python regexp.

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

Leave a Reply