Lorsque j'exécute la tâche ansible (v2.8.4) suivante, j'obtiens

`changed: [1.2.3.4]`   

Alors que j'attends

ok: [1.2.3.4]

Puisque fetch ne change (je pensais) que le côté local.

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

Je peux, bien sûr, éviter cela en utilisant changed_when: false mais cela semble un peu bizarre ?

Citant les documents:

Il est utilisé pour récupérer des fichiers à partir de machines distantes et les stocker localement dans une arborescence de fichiers, organisée par nom d'hôte.

0
k1eran 27 sept. 2019 à 18:16

1 réponse

Meilleure réponse

Ansible vous permet de décrire des états prévisibles. Dans votre cas particulier, vous utilisez le module fetch (mais en utilisant copy serait identique delta le sens de transfert) et décrivant les éléments suivants :

fileX (alias dest) sur le serveurA doit exister et avoir le même contenu que fileY (alias src) sur le serveurB

Il n'y a que 2 raisons qui peuvent expliquer votre résultat entre 2 jeux consécutifs :

  1. le fichier de destination a été modifié ou supprimé (par exemple après que vous ayez fini de le décompresser)
  2. le fichier source a été modifié.

Pour preuve, un playbook de test fetch.yml :

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

Première exécution:

$ # 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   

Deuxième manche

$ 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   

Comme vous pouvez le voir ci-dessus, rien n'a été changé. Mais si vous changez la source ou la destination :

$ # 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   
1
Zeitounator 29 sept. 2019 à 17:00