Ansible Lineinfile Module With Regexp Examples

Il modulo lineinfile di Ansible è usato per inserire nuove linee alla fine del file o in qualsiasi punto del file. Con il modulo ansible lineinfile possiamo rimuovere le linee esistenti dal file e possiamo sostituire le linee. Nei seguenti esempi vi mostrerò come usare il modulo ansible lineinfile con diversi parametri come regexpto per inserire nuove linee.

Craete un nuovo file e aggiungete una linea:

# 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

Nel modulo lineinfile possiamo usare diversi parametri a seconda delle nostre esigenze. Qui ho usato il parametro ‘path’, il parametro path dice a lineinfile a quale file deve modificare, quindi nel parametro path dovremmo menzionare il percorso del file che stiamo per modificare. Nel parametro line dobbiamo aggiungere la linea che sta per essere aggiunta nel file. Per aggiungere la linea al file, dovremmo menzionare il parametro state come presente. Creare il parametro con sì, abbiamo usato per creare il file se il file non esiste.

cosa fa questo playbook

creerà un nuovo file e aggiungerà la linea al file. Se si esegue di nuovo il playbook, non ci saranno cambiamenti in quel file poiché lineinfile aggiungerà la linea se la linea non esiste. Se la linea esiste già, allora non la aggiungerà di nuovo.

se avete rimosso il parametro create e se eseguite il playbook. Dovete avere il file esistente nel percorso definito altrimenti vi darà un errore come

fatale: : FAILED! => {“changed”: false, “msg”: “Destinazione /progetto/devops/abc.txt non esiste!”, “rc”: 257}

Se il file esiste già:

se il file è già esistito allora verrà aggiunto alla fine del file.

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 è usato per modificare la linea particolare nel file. Qui abbiamo menzionato nel parametro regexp come ‘^devops’. ciò significa che la linea iniziata con docker deve modificare con la linea ‘ciao devops’ nel file. dovremmo menzionare backrefs come sì. Backrefs sì sostituirà la linea con ‘hello devops’ solo se si trova la linea regexp (^docker) nel file. Se non c’è nessuna linea iniziata con docker non cambierà nulla nel file, il file verrà lasciato invariato.

Per impostazione predefinita il valore di backrefs è no, quindi se non hai menzionato backrefs nel task assumerà come ‘backref: no’

Cosa succederà se non hai menzionato backrefs: o

se non hai menzionato backrefs come sì, e se non c’è nessuna linea iniziata con docker, ancora la linea sarà aggiunta alla fine del file. Se si esegue il playbook più volte, la linea verrà aggiunta un certo numero di volte. Per evitare questo problema dovresti menzionare backref come yes.

Aggiungi una linea dopo/prima di una particolare linea:

Se vuoi aggiungere una linea dopo/prima di una particolare linea puoi usare il parametro insertafter/insertbefore nel modulo 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'

Qui aggiungerà la linea ‘hello devops’ dopo la linea iniziata con docker.

Se vuoi aggiungere la linea prima dell’inizio della linea iniziata con docker, puoi mettere insertbefore.

Rimuovere una linea usando 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

Qui rimuoverà la linea iniziata con docker. Per rimuovere la linea usando regexp in ansible dovremmo usare il parametro state come absent.

In tutti gli esempi precedenti abbiamo discusso della linea iniziata con, poiché ho menzionato il simbolo (^). Questo simbolo rappresenta la ‘linea che inizia con’, se vuoi conoscere più opzioni diverse dovresti imparare python regexp.

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

Leave a Reply