Ansible Lineinfile-moduuli Regexp-esimerkeillä
Ansiblen lineinfile-moduulia käytetään lisäämään uusia rivejä tiedoston loppuun tai mihin tahansa kohtaan tiedostoa. Ansible lineinfile -moduulin avulla voimme poistaa tiedostosta olemassa olevia rivejä ja voimme korvata rivejä. Seuraavissa esimerkeissä näytän, miten ansible lineinfile -moduulia käytetään eri parametrien, kuten regexpton, kanssa uusien rivien lisäämiseksi.
Craete uusi tiedosto ja lisää rivi:
# 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
Lineinfile-moduulissa voimme käyttää erilaisia parametreja riippuen vaatimuksistamme. Tässä käytin ’path’ -parametria, path-parametri kertoo lineinfile-moduulille, mihin tiedostoon sen on muutettava Joten path-parametrissa meidän pitäisi mainita sen tiedoston polku, jota aiomme muuttaa. Line-parametrissa meidän on lisättävä rivi, joka lisätään tiedostoon. Jos haluamme lisätä rivin tiedostoon, meidän on mainittava state-parametri. Create-parametrissa on yes, jota käytämme tiedoston luomiseen, jos tiedostoa ei ole olemassa.
mitä tämä playbook tekee
se luo uuden tiedoston ja lisää rivin tiedostoon. Jos suoritat playbookin uudelleen, mitään muutoksia ei tapahdu kyseiseen tiedostoon, koska lineinfile lisää rivin, jos riviä ei ole olemassa. Jos rivi on jo olemassa, se ei lisää riviä uudelleen.
jos poistat create-parametrin ja jos suoritat playbookin. Sinun on oltava tiedosto olemassa määritellyssä polussa, muuten se läpäisee sinulle virheen kuten
fatal: : FAILED! => {”changed”: false, ”msg”: ”Destination /project/devops/abc.txt does not exist !”, ”rc”: 257}
Jos tiedosto on jo olemassa:
Jos tiedosto on jo olemassa niin se liitetään tiedoston loppuun.
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:tä käytetään tiedoston tietyn rivin muuttamiseen. Tässä mainitaan regexp-parametrina ’^devops’. eli dockerilla aloitettu rivi on muutettava tiedostossa olevalla rivillä ’hello devops’. meidän pitäisi mainita backrefs kyllä. Backrefs yes korvaa rivin rivillä ’hello devops’ vain, jos tiedostosta löytyy regexp-rivi (^docker). Jos dockerilla aloitettua riviä ei ole, se ei muuta tiedostossa mitään, tiedosto jätetään ennalleen.
By default backrefs arvo on no, joten jos et ole maininnut backrefs tehtävässä se olettaa kuten ’backref: no’
Mitä tapahtuu jos et ole maininnut backrefs: tai
jos et ole maininnut backrefs kuin yes, ja jos ei ole riviä aloitettu dockerilla, silti rivi lisätään tiedoston loppuun. Jos suoritat playbookin useita kertoja, rivi lisätään sen verran monta kertaa. Välttääksesi tämän ongelman sinun tulisi mainita backref as yes.
Lisää rivi tietyn rivin jälkeen/ennen tiettyä riviä:
Jos haluat lisätä rivin tietyn rivin jälkeen/ennen, voit käyttää insertafter/insertbefore-parametria ansiblen lineinfile-moduulissa.
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
Tässä se lisää rivin ’hello devops’ rivin dockerilla aloitetun rivin jälkeen.
Jos haluat lisätä rivin ennen dockerilla aloitetun rivin alkua, voit laittaa insertbefore.
Poista rivi käyttäen 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
Tässä se poistaa dockerilla aloitetun rivin. Poistaaksemme rivin regexp:n avulla Ansibessa meidän tulee käyttää state-parametria absent.
Kaikkiin edellä mainittuihin esimerkkeihin keskustelimme rivistä, joka on aloitettu, koska mainitsin symbolin(^). Tämä symboli edustaa ’line starting with’, jos haluat tietää enemmän eri vaihtoehtoja, sinun pitäisi oppia python regexp.
https://docs.python.org/2/library/re.html
Leave a Reply