Saltar a contenido

Ansible - Gestión de archivos

En este capítulo aprenderás a gestionar archivos con Ansible.


Objetivos : En este capítulo aprenderá a:

✔ modificar el contenido de un archivo;
✔ subir archivos a los servidores de destino;
✔ descargar archivos desde los servidores de destino.

🏁 ansible, module, files

Conocimiento: ⭐ ⭐
Complejidad: ⭐

Tiempo de lectura: 20 minutos


Dependiendo de sus necesidades, tendrá que utilizar módulos de Ansible diferentes para modificar los archivos de configuración del sistema.

Módulo ini_file

Cuando quiera modificar un archivo INI (la sección entre [] y los pares clave=valor), la forma más fácil es utilizar el módulo ini_file.

Note

Puede encontrar más información aquí.

El módulo requiere:

  • El valor de la sección
  • El nombre de la opción
  • El nuevo valor

Ejemplo de uso:

- name: change value on inifile
  community.general.ini_file:
    dest: /path/to/file.ini
    section: SECTIONNAME
    option: OPTIONNAME
    value: NEWVALUE

Módulo lineinfile

Para asegurarse de que una línea está presente en un archivo, o cuando se necesita añadir o modificar una sola línea en un archivo, utilice el módulo linefile.

Note

Puede encontrar más información aquí.

En este caso, la línea a modificar en un archivo se encontrará mediante una regexp.

Por ejemplo, para garantizar que la línea que comienza con SELINUX= en el archivo /etc/selinux/config contiene el valor enforcing:

- ansible.builtin.lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: 'SELINUX=enforcing'

Módulo copy

Cuando hay que copiar un archivo desde el servidor Ansible a uno o más hosts, es mejor utilizar el módulo copy.

Note

Puede encontrar más información aquí.

Aquí estamos copiando el archivo myflile.conf de una ubicación a otra:

- ansible.builtin.copy:
    src: /data/ansible/sources/myfile.conf
    dest: /etc/myfile.conf
    owner: root
    group: root
    mode: 0644

Módulo fetch

Cuando hay que copiar un archivo de un servidor remoto a un servidor local, lo mejor es utilizar el módulo fetch.

Note

Puede encontrar más información aquí.

Este módulo hace lo contrario que el módulo copy:

- ansible.builtin.fetch:
    src: /etc/myfile.conf
    dest: /data/ansible/backup/myfile-{{ inventory_hostname }}.conf
    flat: yes

Módulo template

Ansible y su módulo template utilizan el sistema de plantillas Jinja2 (http://jinja.pocoo.org/docs/) para generar archivos en los hosts de destino.

Note

Puede encontrar más información aquí.

Por ejemplo:

- ansible.builtin.template:
    src: /data/ansible/templates/monfichier.j2
    dest: /etc/myfile.conf
    owner: root
    group: root
    mode: 0644

Es posible añadir un paso de validación si el servicio de destino lo permite (por ejemplo Apache con el comando apachectl -t):

- template:
    src: /data/ansible/templates/vhost.j2
    dest: /etc/httpd/sites-available/vhost.conf
    owner: root
    group: root
    mode: 0644
    validate: '/usr/sbin/apachectl -t'

Módulo get_url

Para subir archivos desde un sitio web o ftp a uno o más hosts, utilice el módulo get_url:

- get_url:
    url: http://site.com/archive.zip
    dest: /tmp/archive.zip
    mode: 0640
    checksum: sha256:f772bd36185515581aa9a2e4b38fb97940ff28764900ba708e68286121770e9a

Al proporcionar una suma de comprobación del archivo, éste no se volverá a descargar si ya está presente en la ubicación de destino y su suma de comprobación coincide con el valor proporcionado.