GNU/Linux >> Tutoriels Linux >  >> Linux

Comment récupérer plusieurs fichiers d'une machine distante à une machine locale avec Ansible

Solution 1 :

Vous devez utiliser le module de synchronisation pour ce faire. Cela utilise la puissance impressionnante de rsync. Il copiera les structures de fichiers et de répertoires de n'importe quelle profondeur, est à l'épreuve des balles et très efficace - ne copiant que les octets réels qui ont changé :

- name: Fetch stuff from the remote and save to local
  synchronize:  src={{ item }} dest=/tmp/ mode=pull
  with_items:
    - "folder/one"
    - "folder/two"

La clé est le mode paramètre :

Spécifiez le sens de la synchronisation. En mode push, l'hôte local ou le délégué est la source ; En mode pull, l'hôte distant en contexte est la source.

Solution 2 :

Vous aurez probablement besoin d'enregistrer le contenu distant et de le parcourir en boucle, quelque chose comme ceci devrait fonctionner :

- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
  register: files_to_copy

- fetch: src=/remote/{{ item }} dest=/local/
  with_items: "{{ files_to_copy.stdout_lines }}"

/remote doit être modifié avec le chemin du répertoire sur votre serveur distant et /local/ avec un répertoire sur votre maître

Solution 3 :

Je n'ai pas assez de représentants pour commenter sinon je l'ajouterais.

J'ai utilisé ce que Kęstutis a posté. j'ai dû faire une légère modification

- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
  register: files_to_copy

- fetch: src=/remote/{{ item }} dest=/local/
  with_items: "{{ files_to_copy.stdout_lines }}"

Le with_items était la zone que je devais changer. il n'a pas été en mesure de localiser les fichiers autrement.

Solution 4 :

Correction de l'exemple ci-dessus

- hosts: srv-test
  tasks:
    - find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
      register: files_to_copy
    - fetch: src={{ item.path }} dest=/tmp
      with_items: "{{ files_to_copy.files }}"

Solution 5 :

bien, si vous utilisez la dernière version ansible, comme 2.9.9, je pense que nous avons besoin de guillemets pour l'élément

- name: use find to get the files list which you want to copy/fetch
  find: 
    paths: /etc/
    patterns: ".*passwd$"
    use_regex: True   
  register: file_2_fetch

- name: use fetch to get the files
  fetch:
    src: "{{ item.path }}"
    dest: /tmp/
    flat: yes
  with_items: "{{ file_2_fetch.files }}"

Linux
  1. Comment copier un fichier d'un serveur distant vers une machine locale ?

  2. Comment créer plusieurs zips à partir d'un répertoire contenant un million de fichiers XML ?

  3. Comment transférer des fichiers sous Linux avec SCP et Rsync

  4. Comment revenir à scp local alors que j'ai déjà sshed sur une machine distante?

  5. Comment utiliser rsync depuis un PC Windows vers un serveur Linux distant ?

Linux :Comment partager des fichiers sur un réseau local avec woof

Comment partager en toute sécurité des fichiers à partir de la ligne de commande avec ffsend sous Linux

Comment télécharger des fichiers à partir de serveurs Linux distants

Comment cloner un référentiel Git avec Ansible

Comment renommer plusieurs fichiers d'une extension à une autre sous Linux/Unix ?

Comment télécharger plusieurs fichiers sur FTP à partir d'un serveur Linux ?