Ansible Lineinfile Module With Regexp Examples
El módulo ansible lineinfile se utiliza para insertar nuevas líneas al final del archivo o en cualquier parte del mismo. Con el módulo ansible lineinfile podemos eliminar líneas existentes del archivo y podemos reemplazar las líneas. En los siguientes ejemplos le mostraré cómo utilizar el módulo ansible lineinfile con diferentes parámetros como regexpto insertar nuevas líneas.
Craete nuevo archivo y añadir una línea:
# 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
En el módulo lineinfile podemos utilizar diferentes parámetros depende de nuestro requisito. Aquí utilicé el parámetro ‘path’, el parámetro path le dice a lineinfile a qué archivo tiene que modificar Así que en el parámetro path debemos mencionar la ruta del archivo que vamos a modificar. En el parámetro line tenemos que añadir la línea que se va a añadir en el archivo. Para añadir la línea al archivo, debemos mencionar el parámetro state como presente. El parámetro create con yes, lo utilizamos para crear el fichero si no existe el fichero.
¿qué hace este playbook
creará un nuevo fichero y añadirá la línea al fichero. Si ejecuta el libro de jugadas de nuevo no habrá cambios en ese archivo ya que lineinfile añadirá la línea si la línea no existe. Si la línea ya existe entonces no agregará esa línea de nuevo.
si quitaste el parámetro create y si ejecutas el playbook. Usted debe tener el archivo existe en la ruta definida de lo contrario será a través de usted error como
fatal: : FAILED! => {«changed»: false, «msg»: «Destination /project/devops/abc.txt does not exist !», «rc»: 257}
Si el archivo ya existe:
si el archivo ya existe entonces se anexará al final del archivo.
Ejemplo de Ansible Lineinfile With Regexp:
---- 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 utiliza para modificar la línea particular en el archivo. Aquí mencionamos en el parámetro regexp como ‘^devops’. eso significa que la línea iniciada con docker tiene que modificar con la línea ‘hello devops’ en el archivo. debemos mencionar backrefs como yes. Backrefs yes reemplazará la línea con ‘hello devops’ sólo si se encuentra la línea regexp (^docker) en el archivo. Si no hay ninguna línea iniciada con docker no cambiará nada en el archivo, el archivo se dejará sin cambios.
Por defecto el valor de backrefs es no, por lo que si no has mencionado backrefs en la tarea se asumirá como ‘backref: no’
Qué pasará si no has mencionado backrefs: o
si no has mencionado backrefs como sí, y si no hay ninguna línea iniciada con docker, todavía la línea se añadirá al final del archivo. Si ejecuta el playbook varias veces, la línea se añadirá ese número de veces. Para evitar este problema debe mencionar backref como sí.
Añadir una línea después/antes de una línea particular:
Si quieres añadir una línea después/antes de una línea concreta puedes usar el parámetro insertafter/insertbefore en el módulo 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'
Aquí se añadirá la línea ‘hello devops’ después de la línea iniciada con docker.
Si quieres añadir la línea antes del inicio de la línea, iniciada con docker, puedes poner insertbefore.
Eliminar una línea usando regexp de Ansible
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' state: absent
Aquí eliminará la línea iniciada con docker. Para eliminar la línea mediante el uso de regexp en ansible debemos utilizar el parámetro de estado como ausente.
En todos los ejemplos anteriores discutimos acerca de la línea comenzó con, ya que mencioné el símbolo(^). Este símbolo representa la «línea que comienza con», si usted quiere saber más opciones diferentes que debe aprender python regexp.
https://docs.python.org/2/library/re.html
Leave a Reply