Modul Ansible Lineinfile s příklady regexpů
Modul Ansible Lineinfile slouží k vkládání nových řádků na konec souboru nebo kamkoli do souboru. Pomocí modulu ansible lineinfile můžeme ze souboru odstranit existující řádky a můžeme je nahradit. V následujících příkladech vám ukážu, jak použít modul ansible lineinfile s různými parametry, jako je regexppro vkládání nových řádků.
Vytvořte nový soubor a přidejte řádek:
# 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
V modulu lineinfile můžeme použít různé parametry v závislosti na našich požadavcích. Zde jsem použil parametr ‚path‘, parametr path říká modulu lineinfile, který soubor má upravit Takže v parametru path bychom měli uvést cestu k souboru, který budeme upravovat. V parametru line musíme doplnit řádek, který se má do souboru přidat. Abychom řádek do souboru přidali, měli bychom uvést parametr state jako přítomný. Parametr create s yes použijeme k vytvoření souboru, pokud soubor neexistuje.
co dělá tento playbook
vytvoří nový soubor a do souboru přidá řádek. Pokud spustíte playbook znovu, nedojde k žádné změně v tomto souboru, protože lineinfile přidá řádek, pokud řádek neexistuje. Pokud řádek již existuje, pak tento řádek znovu nepřidá.
pokud jste odstranili parametr create a pokud spustíte playbook. Musíte mít soubor existující v definované cestě, jinak vám to přes chybu typu
fatal: : FAILED! => {„changed“: false, „msg“: „Destination /project/devops/abc.txt does not exist !“, „rc“: 257}
If The File is Already Existed:
Ansible Lineinfile With Regexp Příklad: Pokud soubor již existuje, připojí se na konec souboru:
---- 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 se použije k úpravě konkrétního řádku v souboru. Zde jsme v parametru regexp uvedli ‚^devops‘. to znamená, že řádek spuštěný pomocí docker se má modifikovat s řádkem ‚hello devops‘ v souboru. měli bychom uvést zpětné odkazy jako ano. Backrefs yes nahradí řádek s ‚hello devops‘ pouze v případě, že je v souboru nalezen řádek regexp(^docker). Pokud v souboru není žádný řádek začínající docker, nezmění to v souboru nic, soubor zůstane beze změny.
Ve výchozím nastavení je hodnota backrefs ne, takže pokud jste v úloze neuvedli backrefs, bude to předpokládat jako ‚backref: no‘
Co se stane, pokud jste neuvedli backrefs: nebo
pokud jste neuvedli backrefs jako ano, a pokud není žádný řádek spuštěný s docker, přesto bude řádek přidán na konec souboru. Pokud spustíte playbook vícekrát, bude řádek přidán tolikrát. Abyste se tomuto problému vyhnuli, měli byste uvést backref jako yes.
Přidat řádek za/před konkrétní řádek:
Pokud chcete přidat řádek za/před konkrétní řádek, můžete použít parametr insertafter/insertbefore v modulu 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'
Zde se přidá řádek ‚hello devops‘ za řádek spuštěný pomocí docker.
Pokud chcete přidat řádek před začátek řádku, spuštěného pomocí docker, můžete vložit insertbefore.
Odstranění řádku pomocí 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
Zde to odstraní řádek spuštěný pomocí docker. Pro odstranění řádku pomocí regexpu v ansible bychom měli použít parametr state jako absent.
Ve všech výše uvedených příkladech jsme se bavili o řádku, který začíná, protože jsem zmínil symbol(^). Tento symbol představuje ‚řádek začínající od‘, pokud chcete znát více různých možností, měli byste se naučit python regexp.
https://docs.python.org/2/library/re.html
.
Leave a Reply