Copia idempotente
En este paso, harás que la operación de copia sea idempotente utilizando el módulo Ansible Copy. Asegurarás que el archivo solo se copie si no existe en el host remoto o si el archivo de origen ha cambiado.
Primero, modifica el archivo de playbook existente eliminando todo el contenido y agregando el siguiente contenido al archivo del playbook:
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes: Este parámetro especifica que la ruta src está en el host remoto, lo que permite a Ansible transferir archivos desde el host remoto a otra ubicación.
A través de esta tarea del playbook, el archivo /home/labex/file.txt ubicado en el host remoto se copiará a /tmp/file2.txt en el host remoto solo si no existe o si el archivo de origen ha cambiado.
A continuación, verifica si el archivo /tmp/file2.txt existe.
ll /tmp/file2.txt
Ejemplo de salida:
ls: cannot access '/tmp/file2.txt': No such file or directory
Luego, ejecuta el playbook utilizando el siguiente comando:
ansible-playbook copy-module-playbook.yaml
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 [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifica que el archivo file2.txt se copie a la ruta de destino especificada en el host remoto solo si no existe o si el archivo de origen ha cambiado.
ll /tmp/file2.txt
Ejemplo de salida:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
En este punto, ejecuta el playbook nuevamente.
ansible-playbook copy-module-playbook.yaml
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 [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ten en cuenta que changed=1 se convierte en changed=0, lo que demuestra que este playbook de Ansible puede detectar que el archivo solo se copiará si no existe en el host remoto o si el archivo de origen ha sido modificado.