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.