Ansible Lineinfile-modul med Regexp-eksempler

Ansible lineinfile-modulet bruges til at indsætte nye linjer i slutningen af filen eller et hvilket som helst sted i filen. Med ansible lineinfile-modulet kan vi fjerne eksisterende linjer fra filen, og vi kan erstatte linjerne. I de følgende eksempler vil jeg vise dig, hvordan du bruger ansible lineinfile modulet med forskellige parametre som regexpto indsætte nye linjer.

Craete ny fil og tilføje en linje:

# 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 lineinfile-modulet kan vi bruge forskellige parametre afhængigt af vores krav. Her brugte jeg “path” parameteren, path parameteren fortæller lineinfile hvilken fil den skal ændre, så i path parameteren skal vi nævne stien til den fil som vi vil ændre. I line-parameteren skal vi tilføje den linje, der skal tilføjes i filen. For at tilføje linjen til filen skal vi nævne state-parameteren som til stede. Create parameter med yes, vi brugte til at oprette filen, hvis filen ikke eksisterer.

hvad gør denne playbook

den vil oprette en ny fil, og den vil tilføje linjen til filen. Hvis du kører playbook igen, vil der ikke ske nogen ændringer i denne fil, da lineinfile vil tilføje linjen, hvis linjen ikke findes. Hvis linjen allerede eksisterer, vil den ikke tilføje linjen igen.

hvis du har fjernet parameteren create, og hvis du kører playbooken. Du skal have filen eksisteret i den definerede sti, ellers vil den gennem dig fejl som

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

If The File is Already Existed:

hvis filen allerede eksisterer, vil den blive vedhæftet til slutningen af 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 bruges til at ændre en bestemt linje i filen. Her har vi nævnt i regexp-parameteren som ‘^devops’. det betyder, at den linje, der startes med docker, skal ændres med linjen ‘hello devops’ i filen. vi bør nævne backrefs som ja. Backrefs yes vil kun erstatte linjen med “hello devops”, hvis den finder regexp-linjen (^docker) i filen. Hvis der ikke er nogen linje startet med docker vil det ikke ændre noget i filen, filen vil blive efterladt uændret.

Som standard er backrefs-værdien no, så hvis du ikke har nævnt backrefs i opgaven, vil den antage som ‘backref: no’

Hvad vil der ske, hvis du ikke har nævnt backrefs: eller

hvis du ikke har nævnt backrefs som yes, og hvis der ikke er nogen linje startet med docker, vil linjen stadig blive tilføjet i slutningen af filen. Hvis du kører playbooken flere gange, vil linjen blive tilføjet taht antal gange. For at undgå dette problem bør du nævne backref som yes.

Tilføj en linje efter/før en bestemt linje:

Hvis du vil tilføje en linje efter/før en bestemt linje, kan du bruge insertafter/insertbefore parammeter i ansible lineinfile modulet.

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

Her vil den tilføje ‘hello devops’-linjen efter den linje, der er startet med docker.

Hvis du vil tilføje linjen før start af linjen, der er startet med docker, kan du sætte insertbefore.

Fjern en linje ved hjælp af 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

Her vil den fjerne linjen, der er startet med docker. For at fjerne linjen ved hjælp af regexp i ansible skal vi bruge state parameter som absent.

I alle ovenstående eksempler diskuterede vi om linjen startet med, da jeg nævnte symbolet(^). Dette symbol repræsenterer ‘linjen starter med’, hvis du vil kende flere forskellige muligheder, bør du lære python regexp.

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

Leave a Reply