Cópia Idempotente
Nesta etapa, você tornará a operação de cópia idempotente usando o módulo Ansible Copy. Você garantirá que o arquivo seja copiado somente se ele não existir no host remoto ou se o arquivo de origem tiver sido alterado.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do 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 o caminho src está no host remoto, permitindo que o Ansible transfira arquivos do host remoto para outro local.
Através desta tarefa do playbook, o arquivo /home/labex/file.txt localizado no host remoto será copiado para /tmp/file2.txt no host remoto somente se ele não existir ou se o arquivo de origem tiver sido alterado.
Em seguida, verifique se o arquivo /tmp/file2.txt existe.
ll /tmp/file2.txt
Exemplo de saída:
ls: cannot access '/tmp/file2.txt': No such file or directory
Então, execute o playbook usando o seguinte comando:
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[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, verifique se o arquivo file2.txt é copiado para o caminho de destino especificado no host remoto somente se ele não existir ou se o arquivo de origem tiver sido alterado.
ll /tmp/file2.txt
Exemplo de saída:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
Neste ponto, execute o playbook novamente.
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[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
Observe que changed=1 se torna changed=0, provando que este playbook Ansible pode perceber que o arquivo só será copiado se ele não existir no host remoto ou se o arquivo de origem tiver sido alterado.