Ansible lineinfile modul Regexp példákkal
Az Ansible lineinfile modul arra szolgál, hogy új sorokat illesszen be a fájl végére vagy a fájl bármely pontjára. Az ansible lineinfile modullal eltávolíthatjuk a létező sorokat a fájlból és kicserélhetjük a sorokat. A következő példákban megmutatom, hogyan használjuk az ansible lineinfile modult különböző paraméterekkel, mint például regexpto új sorok beillesztésére.
Craete új fájlt és hozzáad egy sort:
# 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
A lineinfile modulban különböző paramétereket használhatunk a követelményeinktől függően. Itt használtam a “path” paramétert, a path paraméter azt mondja a lineinfile-nak, hogy melyik fájlt kell módosítania Tehát a path paraméterben meg kell említenünk a fájl elérési útját, amelyet módosítani fogunk. A line paraméterben hozzá kell adnunk a sort, amelyet hozzá kell adnunk a fájlhoz. Ahhoz, hogy a sort hozzáadjuk a fájlhoz, meg kell említenünk a state paramétert, mint jelenlévőt. Create parameter with yes, we used to create the file if the file is not existed.
what does this playbook do
it will create new file and it will add the line to file. Ha újra futtatjuk a playbookot, nem történik változás a fájlban, mivel a lineinfile hozzáadja a sort, ha a sor nem létezik. Ha a sor már létezik, akkor nem fogja újra hozzáadni a sort.
ha eltávolította a create paramétert, és ha futtatja a playbookot. A fájlnak léteznie kell a megadott elérési útvonalon, különben olyan hibaüzenetet kap, mint
fatal: : FAILED! => {“changed”: false, “msg”: “Destination /project/devops/abc.txt does not exist !”, “rc”: 257}
Ha a fájl már létezik:
ha a fájl már létezik, akkor a fájl végéhez csatolja.
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
A Regexp a fájl adott sorának módosítására szolgál. Itt megemlítettük a regexp paraméterben, hogy ‘^devops’. ez azt jelenti, hogy a dockerrel indított sort a ‘hello devops’ sorral kell módosítani a fájlban. meg kell említenünk a backrefs-t, mint igen. A backrefs yes csak akkor helyettesíti a sort a ‘hello devops’ sorral, ha a fájlban megtalálható a regexp sor(^docker). Ha nincs dockerrel indított sor, akkor nem változtat semmit a fájlban, a fájl változatlanul marad.
A backrefs értéke alapértelmezés szerint no, tehát ha nem említette a backrefs-t a feladatban, akkor azt fogja feltételezni, hogy ‘backref: no’
Mi fog történni, ha nem említette a backrefs-t: vagy
ha nem említette a backrefs-t igennek, és ha nincs dockerrel indított sor, akkor is a fájl végére kerül a sor. Ha többször futtatod a playbookot, akkor a sor ennyi alkalommal lesz hozzáadva. Ennek a problémának az elkerülése érdekében a backref-et yes-ként kell megemlíteni.
Egy adott sor után/előtti sor hozzáadása:
Ha egy adott sor után/előtti sort akarsz hozzáadni, akkor használhatod az ansible lineinfile modulban az insertafter/insertbefore paramétert.
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
Itt a ‘hello devops’ sort a dockerrel indított sor után fogja hozzáadni.
Ha a dockerrel indított sor előtt akarja hozzáadni a sort, akkor az insertbefore-t írja be.
Remove a line using 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
Ez itt eltávolítja a dockerrel indított sort. Ahhoz, hogy a sort az ansible regexp segítségével távolítsuk el, a state paramétert absentként kell használnunk.
A fenti példák mindegyikében a kezdődött sorról beszéltünk, mivel említettem a szimbólumot(^). Ez a szimbólum a ‘line starting with’-t jelképezi, ha több különböző opciót szeretnél megismerni, akkor meg kell tanulnod a python regexp-t.
https://docs.python.org/2/library/re.html
Leave a Reply