Actualización del contenido de archivos en hosts remotos
El módulo lineinfile
El módulo lineinfile
de Ansible es una potente herramienta para actualizar el contenido de archivos en hosts remotos. Permite:
- Insertar, actualizar o eliminar una sola línea en un archivo
- Asegurarse de que una línea esté presente o ausente en un archivo
- Reemplazar una línea coincidente en un archivo
A continuación, se muestra un ejemplo de cómo usar el módulo lineinfile
para actualizar el contenido de un archivo en un host remoto:
- hosts: all
tasks:
- name: Update the motd file
lineinfile:
path: /etc/motd
regexp: "^Welcome"
line: "Welcome to the LabEx server!"
state: present
Este Playbook de Ansible actualizará el archivo /etc/motd
(mensaje del día) en todos los hosts definidos en el inventario, asegurándose de que la línea que comienza con "Welcome" esté presente y se establezca en "Welcome to the LabEx server!".
Manejo de múltiples líneas
Si necesita actualizar múltiples líneas en un archivo, puede usar el módulo blockinfile
. Este módulo le permite insertar o actualizar un bloque de texto en un archivo, preservando el contenido existente alrededor del bloque.
A continuación, se muestra un ejemplo de cómo usar el módulo blockinfile
para actualizar el contenido de un archivo de configuración:
- hosts: all
tasks:
- name: Update the nginx configuration
blockinfile:
path: /etc/nginx/conf.d/default.conf
block: |
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
state: present
Este Playbook de Ansible actualizará el archivo /etc/nginx/conf.d/default.conf
en todos los hosts definidos en el inventario, asegurándose de que todo el bloque de servidor esté presente en la configuración.
Manejo de datos sensibles
Si necesita actualizar archivos que contengan información sensible, como contraseñas o claves de API, puede usar Ansible Vault para cifrar los datos sensibles.
A continuación, se muestra un ejemplo de cómo usar Ansible Vault para actualizar un archivo con información sensible:
- hosts: all
tasks:
- name: Update the sensitive file
lineinfile:
path: /etc/myapp/sensitive.conf
regexp: "^api_key="
line: "api_key={{ vault_api_key }}"
state: present
vars_files:
- vault.yml
En este ejemplo, la variable vault_api_key
se almacena en un archivo separado (vault.yml
) y se cifra utilizando Ansible Vault. Esto asegura que la información sensible no se almacene en texto plano en su Playbook de Ansible.
Ahora que tiene una sólida comprensión de cómo actualizar el contenido de archivos en hosts remotos utilizando Ansible, exploremos algunos casos de uso prácticos y ejemplos.