ANSIBLE `fetch`, требующий` change_when: false`? - PullRequest
0 голосов
/ 27 сентября 2019

Когда я запускаю следующую задачу ansible (v2.8.4), я получаю

`changed: [1.2.3.4]`   

, тогда как ожидаю

ok: [1.2.3.4]

, поскольку fetch(Я думал) только меняя сторону local .

- name: Foo
  fetch:
    dest: config/
    flat: true
    src: /etc/foo/bar.tar.gz

Конечно, я могу избежать этого, используя changed_when: false, но это кажется немного странным?

Цитирование документов:

Этоиспользуется для извлечения файлов с удаленных машин и их локального хранения в файловом дереве, организованном по имени хоста.

1 Ответ

1 голос
/ 28 сентября 2019

Ansible позволяет вам описывать предсказуемые состояния.В вашем конкретном случае вы используете fetch модуль (но использование copy будет идентично дельте направления передачи) и описываете следующее:

fileX (aka dest) на сервере A должен существовать и иметь тот же контент, что и fileY (aka src) на сервере B

Есть только две причины, которые могут объяснить ваш результат между 2 последовательными воспроизведениями:

  1. целевой файл был изменен или удален (например, после того, как вы его распаковали)
  2. исходный файл был изменен.

В качестве доказательства,тестовая книга воспроизведения fetch.yml:

---
- hosts: localhost
  gather_facts: false
  tasks:
    - name: test fetch idempotency
      fetch:
        dest: /tmp/
        flat: true
        src: "{{ lookup('env', 'HOME') }}/test.txt"

Первый запуск:

$ # Create the fetched file
$ echo "test line" > $HOME/test.txt
$ # Run playbook
$ ansible-playbook fetch.yml 

PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************

TASK [test fetch idempotency] *******************************************************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Второй запуск

$ ansible-playbook fetch.yml 

PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************

TASK [test fetch idempotency] *******************************************************************************************************************************************************************************************************************************************
ok: [localhost]

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Как вы можете видеть выше, ничего не изменилось.Но если вы измените источник или dest:

$ # Run either of the following commands
$ #
$ # Modify the source
$ echo "change file on host" >> $HOME/test.txt
$ # or modify the destination
$ echo "change file on controler" >> /tmp/test.txt
$ # or delete the destination
$ rm /tmp/test.txt
$ # and run playbook again
$ ansible-playbook fetch.yml

PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************

TASK [test fetch idempotency] *******************************************************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...