Ansible es una herramienta de automatización ampliamente utilizada que puede gestionar cientos de nodos de una vez. Ansible tiene muchas características excelentes, y una de ellas es su capacidad para gestionar una sola línea dentro de un archivo en nodos remotos utilizando el módulo lineinfile de Ansible.
El módulo lineinfile de Ansible es un módulo que realiza diversas acciones en una sola línea de un archivo, como reemplazar una línea, actualizar una línea o agregar una línea particular.
En este tutorial, aprenderás qué es el módulo lineinfile de Ansible, cómo funciona y cómo usarlo para gestionar archivos de texto.
Requisitos previos
Esta publicación será un tutorial paso a paso sobre el módulo lineinfile de Ansible. Si deseas seguirlo, asegúrate de tener lo siguiente:
- Un host controlador de Ansible – Este tutorial utilizará Ansible v2.9.24 en una máquina Ubuntu 18.04.5 LTS.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- Apache ya debería estar instalado en la computadora remota si deseas seguir el tutorial exactamente.
Modificando un archivo de texto con el módulo lineinfile de Ansible.
Comencemos este tutorial ejecutando el módulo lineinfile de Ansible mediante comandos ad hoc. Los comandos ad hoc son una forma rápida de probar o ejecutar un solo comando en un host remoto.
Inicia sesión en tu controlador de Ansible y ejecuta el siguiente comando. Este comando utiliza el módulo lineinfile (-m
) para conectarse a la máquina web y pasar un argumento (-a
) que es el comando a ejecutar.
En este caso, el módulo lineinfile actualiza la entrada localhost mapeando la dirección IP 127.0.0.1
con myapache
en el archivo /etc/hosts. Al mapear 127.0.0.1
con myapache
, puedes acceder a la página de prueba de Apache localmente en HTTP://myapache:80
path
denota la ubicación del archivo.regexp
encuentra la expresión regular, si existe, en el archivo y actualiza con127.0.0.1 myapache
especificado en el parámetroline
.- –become permite ejecutar el comando como usuario privilegiado.
- El grupo de inventario
web
es una colección de todos los servidores. ansible.builtin.lineinfile
o simplemente lineinfile es el nombre del módulo.
Después de ejecutar el comando, deberías ver un mensaje CHANGED que confirma que la línea se ha actualizado correctamente en el host remoto.

Inicie sesión en el nodo remoto utilizando un cliente SSH y verifique si el archivo /etc/hosts ha sido actualizado con el nuevo valor utilizando el comando cat
.
Como puede ver a continuación, la entrada de localhost se ha actualizado correctamente con 127.0.0.1 myapache
en la máquina remota.

Modificando múltiples archivos de texto dentro de un libro de jugadas
Trabajar con un comando ad hoc único para administrar líneas en una máquina remota puede estar bien, pero será difícil si tiene líneas en varios archivos o múltiples líneas en un archivo para administrar. En lugar de usar comandos ad hoc, considere usar el módulo lineinfile de Ansible dentro del libro de jugadas utilizando el comando ansible-playbook.
Ahora, aprendamos cómo usar el módulo lineinfile de Ansible dentro del libro de jugadas y modificar algunas líneas.
Suponiendo que ya haya iniciado sesión en el host controlador de Ansible:
1. Cree un directorio llamado ansible_lineinfile_module_demo en su directorio de inicio. Este directorio contendrá el libro de jugadas que utilizará para invocar el módulo lineinfile.
2. Crea otro archivo llamado my_playbook.yml en el directorio ~/ansible_lineinfile_module_demo y pega el siguiente contenido del playbook YAML. Este playbook tiene varias tareas que utilizan el módulo lineinfile
de Ansible para gestionar líneas de diferentes archivos de configuración para Apache en la máquina remota.
El playbook a continuación contiene las siguientes tareas:
1. Verifica si ADMIN
está presente en el archivo /etc/sudoers; si no lo encuentra, la tarea lo añade.
2. Asegura que el predeterminado de Apache esté escuchando en el puerto 8080 dentro del archivo /etc/apache2/ports.conf; si encuentra algún otro puerto, el módulo lineinfile lo actualiza a 8080
. De manera similar, en el archivo /etc/apache2/apache2.conf, actualiza MaxKeepAliveRequests
a 1000 y KeepAliveTimeout
a 100.
3. Añade la línea con el texto “Hello This is my Apache Page” al final de la página index.html
en el servidor remoto bajo el directorio /var/www/html.
Los playbooks de Ansible están escritos en YAML. Para obtener más información sobre YAML, haz clic aquí
3. Ahora, invoca el playbook y ejecuta las tareas usando el comando ansible-playbook
para agregar o actualizar todas las líneas definidas en el playbook en el host remoto.

A continuación, puedes ver que la TAREA tiene un estado de cambiado, lo que significa que el host remoto no estaba en el estado adecuado y fue modificado para ejecutar el comando. Para esa TAREA que tiene un estado OK, muestra que no requieren ningún cambio.
4. A continuación, conéctate por SSH al host remoto usando tu cliente SSH favorito.
5. Finalmente, verifica si todas las líneas definidas en el mi_playbook.yml están actualizadas o agregadas en el host remoto usando el comando cat
.
La captura de pantalla a continuación confirma que el usuario admin
ya está agregado en el archivo sudoers.

Nuevamente, la captura de pantalla a continuación confirma que Apache está escuchando en el Puerto 8080
por defecto.

Finalmente, verifica si MaxKeepAliveRequests
y KeepAliveTimeout
se han actualizado a 1000 y 100, respectivamente.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file Conclusión
El módulo lineinfile de Ansible es una excelente manera de modificar archivos de texto en hosts remotos. El módulo proporciona una excelente manera de agregar, eliminar y modificar líneas en archivos de texto dentro de tus playbooks.
¿Qué otros casos de uso consideras que se beneficiarían del módulo lineinfile de Ansible?