Ansible Lineinfile Module With Regexp Examples
Modulul Ansible lineinfile este utilizat pentru a insera linii noi la sfârșitul fișierului sau oriunde în fișier. Cu modulul ansible lineinfile putem elimina liniile existente din fișier și putem înlocui liniile. În următoarele exemple vă voi arăta cum să utilizați modulul ansible lineinfile cu diferiți parametri, cum ar fi regexpto, pentru a insera noi linii.
Craete new file and add a line:
# 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
În modulul lineinfile putem folosi diferiți parametri în funcție de cerințele noastre. Aici am folosit parametrul „path”, parametrul „path” îi spune lui lineinfile ce fișier trebuie să modifice. Astfel, în parametrul „path” ar trebui să menționăm calea fișierului pe care îl vom modifica. În parametrul line trebuie să adăugăm linia care va fi adăugată în fișier. Pentru a adăuga linia la fișier, trebuie să menționăm parametrul state ca fiind prezent. Parametrul Create cu yes, pe care îl folosim pentru a crea fișierul în cazul în care fișierul nu există.
ce face acest playbook
se va crea un fișier nou și se va adăuga linia în fișier. Dacă rulați din nou playbook-ul nu se va întâmpla nicio modificare în acel fișier, deoarece lineinfile va adăuga linia dacă linia nu există. Dacă linia este deja existentă, atunci nu va adăuga din nou acea linie.
dacă ați eliminat parametrul de creare și dacă rulați playbook-ul. Trebuie ca fișierul să existe în calea definită, altfel vă va da o eroare de genul
fatal: : FAILED! => {„changed”: false, „msg”: „Destination /project/devops/abc.txt does not exist !”, „rc”: 257}
If The File is already Existed:
dacă fișierul există deja, atunci se va adăuga la sfârșitul fișierului.
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 este utilizat pentru a modifica o anumită linie din fișier. Aici am menționat în parametrul regexp ca fiind „^devops”. asta înseamnă că linia începută cu docker trebuie să se modifice cu linia „hello devops” din fișier. ar trebui să menționăm backrefs ca da. Backrefs yes va înlocui linia cu „hello devops” numai dacă se găsește linia regexp (^docker) în fișier. Dacă nu există o linie începută cu docker nu va schimba nimic în fișier, fișierul va rămâne neschimbat.
În mod implicit, valoarea backrefs este no, deci dacă nu ați menționat backrefs în sarcină, aceasta va presupune că ‘backref: no’
Ce se va întâmpla dacă nu ați menționat backrefs: sau
dacă nu ați menționat backrefs ca yes, și dacă nu există o linie începută cu docker, totuși linia va fi adăugată la sfârșitul fișierului. Dacă executați playbook-ul de mai multe ori, linia va fi adăugată de acel număr de ori. Pentru a evita această problemă, ar trebui să menționați backref ca yes.
Adăugați o linie după/înainte de o anumită linie:
Dacă doriți să adăugați o linie după/înainte de o anumită linie, puteți folosi parametrul insertafter/insertbefore din modulul 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'
Aici se va adăuga linia ‘hello devops’ după linia începută cu docker.
Dacă doriți să adăugați linia înainte de începerea liniei, începută cu docker, puteți pune insertbefore.
Îndepărtați o linie folosind 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
Aici se va elimina linia începută cu docker. Pentru a elimina linia folosind regexp în ansible trebuie să folosim parametrul state ca absent.
În toate exemplele de mai sus am discutat despre linia începută cu, deoarece am menționat simbolul(^). Acest simbol reprezintă „linia care începe cu”, dacă doriți să cunoașteți mai multe opțiuni diferite ar trebui să învățați python regexp.
https://docs.python.org/2/library/re.html
.
Leave a Reply