Идемпотентное копирование
На этом шаге вы сделаете операцию копирования идемпотентной с использованием модуля Ansible Copy. Вы будете обеспечивать, чтобы файл копировался только в том случае, если он отсутствует на удаленном хосте или если исходный файл был изменен.
Сначала измените существующий файл playbook, удалив все его содержимое и добавив следующее содержимое:
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes: Этот параметр указывает, что путь src находится на удаленном хосте, позволяя Ansible переносить файлы с удаленного хоста в другое место.
С помощью этой задачи playbook файл /home/labex/file.txt, расположенный на удаленном хосте, будет скопирован в /tmp/file2.txt на удаленном хосте только в том случае, если он отсутствует или если исходный файл был изменен.
Далее проверьте, существует ли файл /tmp/file2.txt.
ll /tmp/file2.txt
Пример вывода:
ls: cannot access '/tmp/file2.txt': No such file or directory
Затем запустите playbook с помощью следующей команды:
ansible-playbook copy-module-playbook.yaml
Пример вывода:
[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
Наконец, убедитесь, что файл file2.txt скопирован в указанный целевой путь на удаленном хосте только в том случае, если он отсутствует или если исходный файл был изменен.
ll /tmp/file2.txt
Пример вывода:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
В этот момент запустите playbook еще раз.
ansible-playbook copy-module-playbook.yaml
Пример вывода:
[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
Обратите внимание, что changed=1 стало changed=0, что доказывает, что этот Ansible playbook может обеспечить, чтобы файл копировался только в том случае, если он отсутствует на удаленном хосте или если исходный файл был изменен.