Introducción
¡Bienvenido al laboratorio del módulo Ansible Fetch! En este laboratorio, profundizarás en el uso del módulo Ansible Fetch. El módulo Fetch te permite recuperar archivos de máquinas remotas y copiarlos a la máquina de control donde se está ejecutando Ansible. Esto es útil cuando necesitas recopilar archivos o artefactos específicos de tus hosts gestionados.
¡Comencemos!
Recuperar un solo archivo
En este paso, aprenderás cómo utilizar el módulo Ansible Fetch para recuperar un solo archivo de una máquina remota. Esto te ayudará a entender el uso básico y la sintaxis del módulo.
Primero, completa el archivo /home/labex/project/fetching_a_single_file.yml.
Abrelo en un editor de texto y agrega el siguiente contenido al archivo del playbook:
- name: Fetch Module Lab
hosts: localhost
gather_facts: false
tasks:
- name: Fetch a single file
fetch:
src: /home/labex/example/example_1.txt
dest: /home/labex/project/example_1.txt
flat: true
fetch: Este es el módulo de Ansible utilizado para recuperar archivos de hosts remotos.src: Esto especifica la ruta del archivo en el host remoto que se debe recuperar. En este ejemplo, es/home/labex/example/example_1.txt.dest: Esto especifica la ruta de destino donde se debe almacenar el archivo recuperado en el host local. En este ejemplo, es/home/labex/project/example_1.txt.flat: Este parámetro controla el comportamiento de la ruta de destino. Cuando se establece entrue, asegura que el archivo recuperado se coloque en el directorio de destino sin crear subdirectorios. Esto es útil cuando se recupera un solo archivo y se desea mantener la estructura de directorios simple.
El módulo fetch en Ansible se utiliza para recuperar archivos de hosts remotos al host local. En esta configuración, se utiliza para recuperar un archivo llamado "example_1.txt" del directorio /home/labex/example/ del host remoto y almacenarlo como "example_1.txt" en el directorio /home/labex/project/ del host local. El parámetro flat: true asegura que el archivo recuperado se coloque directamente en el directorio de destino sin subdirectorios.
Luego, ejecuta el playbook con el siguiente comando:
ansible-playbook fetching_a_single_file.yml
Ejemplo de salida:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Fetch Module Lab] **************************************************
TASK [Fetch a single file] *****************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifica que el archivo example_1.txt se haya recuperado localmente del host remoto.
ll /home/labex/project/example_1.txt
Ejemplo de salida:
-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 /home/labex/project/example_1.txt
Recuperación de múltiples archivos
En este paso, mejorarás tu comprensión del módulo Fetch al recuperar múltiples archivos de una máquina remota. Esto te permitirá recopilar múltiples archivos en una sola tarea.
Primero, completa el archivo /home/labex/project/fetching_multiple_files.yml.
Abrelo en un editor de texto y agrega el siguiente contenido al archivo del playbook:
- name: Fetch Module Lab
hosts: localhost
gather_facts: false
tasks:
- name: Fetch multiple files
loop:
- example_2.txt
- example_3.txt
fetch:
src: "/home/labex/example/{{ item }}"
dest: "/home/labex/project/{{ item }}"
flat: true
loop: Esta palabra clave se utiliza para iterar sobre una lista de elementos.fetch: Este es el módulo de Ansible utilizado para recuperar archivos de hosts remotos.src: Esto especifica la ruta de origen del archivo a recuperar. El marcador de posición{{ item }}se reemplaza con cada elemento del bucle, lo que resulta en la recuperación deexample_2.txtyexample_3.txtdel directorio/home/labex/example/.dest: Esto especifica la ruta de destino donde se deben almacenar los archivos recuperados. Nuevamente, se utiliza el marcador de posición{{ item }}para asegurar que cada archivo se coloque en el directorio correspondiente dentro de/home/labex/project/.flat: Este parámetro controla el comportamiento de la ruta de destino. Cuando se establece entrue, asegura que el archivo recuperado se coloque en el directorio de destino sin crear subdirectorios. Esto es útil cuando se recupera un solo archivo y se desea mantener la estructura de directorios simple.
En esta configuración, se utiliza para recuperar múltiples archivos (example_2.txt y example_3.txt) del directorio /home/labex/example/ en el host local y almacenarlos en los directorios correspondientes dentro de /home/labex/project/. La construcción loop permite iterar sobre una lista de elementos y realizar la operación de recuperación para cada elemento de la lista.
Luego, ejecuta el playbook con el siguiente comando:
ansible-playbook fetching_multiple_files.yml
Ejemplo de salida:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Fetch Module Lab] **************************************************
TASK [Fetch multiple files] ****************************************************
changed: [localhost] => (item=example_2.txt)
changed: [localhost] => (item=example_3.txt)
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifica que example_2.txt y example_3.txt se hayan recuperado localmente del host remoto.
ll /home/labex/project/ | grep example
Ejemplo de salida:
-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 example_1.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_2.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_3.txt
Uso de variables en el módulo Fetch
En este paso, explorarás un uso más avanzado del módulo Ansible Fetch incorporando variables. Recuperarás archivos basados en valores dinámicos definidos en tu playbook.
Primero, completa el archivo /home/labex/project/using_variablesin_fetch_modules.yml.
Abrelo en un editor de texto y agrega el siguiente contenido al archivo del playbook:
- name: Fetch Module Lab
hosts: localhost
gather_facts: false
vars:
file_path: "/home/labex/example/example_4.txt"
dest_path: "/home/labex/project/example_4.txt"
tasks:
- name: Fetch files using variables
fetch:
src: "{{ file_path }}"
dest: "{{ dest_path }}"
flat: true
vars: Esta sección permite definir variables para su uso dentro del playbook.fetch: Este es el módulo de Ansible utilizado para recuperar archivos de hosts remotos.src: Esto especifica la ruta de origen del archivo a recuperar. Utiliza la variablefile_pathpara proporcionar dinámicamente la ruta del archivo de origen.dest: Esto especifica la ruta de destino donde se debe almacenar el archivo recuperado. Utiliza la variabledest_pathpara proporcionar dinámicamente la ruta del archivo de destino.flat: Este parámetro controla el comportamiento de la ruta de destino. Cuando se establece entrue, asegura que el archivo recuperado se coloque en el directorio de destino sin crear subdirectorios. Esto es útil cuando se recupera un solo archivo y se desea mantener la estructura de directorios simple.
En esta configuración, se utiliza para recuperar un archivo de la ruta del archivo de origen (variable file_path) en el host remoto y almacenarlo en la ruta del archivo de destino (variable dest_path) en el nodo de control local de Ansible. El uso de variables permite la especificación dinámica de rutas de archivos, brindando flexibilidad y reutilización en el playbook.
Luego, ejecuta el playbook con el siguiente comando:
ansible-playbook using_variablesin_fetch_modules.yml
Ejemplo de salida:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Fetch Module Lab] **************************************************
TASK [Fetch files using variables] *********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
A continuación, verifica que el archivo example_4.txt se haya recuperado localmente del host remoto.
ll /home/labex/project/example_4.txt
Ejemplo de salida:
-rw-rw-r-- 1 labex labex 23 Mar 14 11:16 /home/labex/project/example_4.txt
Finalmente, intenta especificar file_path y dest_path con la opción -e:
ansible-playbook using_variablesin_fetch_modules.yml -e file_path="/tmp/example_5.txt" -e dest_path="/tmp/target/example_5.txt"
Ejemplo de salida:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Fetch Module Lab] **************************************************
TASK [Fetch files using variables] *********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifica que el archivo example_5.txt se haya recuperado localmente del host remoto.
ll /tmp/target/example_5.txt
Ejemplo de salida:
-rw-rw-r-- 1 labex labex 23 Mar 14 11:24 /tmp/target/example_5.txt
Resumen
¡Felicidades por completar el laboratorio del módulo Ansible Fetch! En este laboratorio, aprendiste cómo utilizar el módulo Ansible Fetch para recuperar archivos de máquinas remotas y copiarlos a la máquina de control. Comenzando por recuperar un solo archivo, avanzaste a recuperar múltiples archivos e incorporaste variables para la recuperación dinámica de archivos.
Al completar este laboratorio, has adquirido una valiosa experiencia en el aprovechamiento del módulo Fetch para recopilar archivos o artefactos específicos de tus hosts gestionados. Sigue explorando Ansible y sus módulos para mejorar aún más tus capacidades de automatización.
¡Que disfrutes automatizando!


