GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So holen Sie mit Ansible mehrere Dateien vom Remote-Computer auf den lokalen Computer

Lösung 1:

Verwenden Sie dazu das Synchronisierungsmodul. Dies nutzt die großartige Leistung von rsync. Es kopiert Datei- und Verzeichnisstrukturen beliebiger Tiefe, ist kugelsicher und hocheffizient - es kopiert nur die tatsächlichen Bytes, die sich geändert haben:

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

Der Schlüssel ist der mode Parameter:

Geben Sie die Richtung der Synchronisation an. Im Push-Modus ist der Localhost oder Delegate die Quelle; Im Pull-Modus ist der Remote-Host im Kontext die Quelle.

Lösung 2:

Wahrscheinlich müssen Sie Remote-Inhalte registrieren und diese dann durchlaufen, so etwas sollte funktionieren:

- 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 }}"

wobei /remote sollte mit dem Verzeichnispfad auf Ihrem Remote-Server und /local/ geändert werden mit Verzeichnis auf Ihrem Master

Lösung 3:

Ich habe nicht genug Repräsentanten, um zu kommentieren, sonst würde ich es hinzufügen.

Ich habe verwendet, was Kęstutis gepostet hat. Ich musste eine kleine Änderung vornehmen

- 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 }}"

Die with_items war der Bereich, den ich ändern musste. es war nicht in der Lage, die Dateien sonst zu finden.

Lösung 4:

Korrektur des obigen Beispiels

- 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 }}"

Lösung 5:

Nun, wenn Sie die neueste Ansible-Version wie 2.9.9 verwenden, benötigen wir Anführungszeichen für das Element.

- 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. So komprimieren Sie mehrere Dateien unter Linux

  2. Wie erstelle ich mehrere Zips aus einem Verzeichnis mit einer Million XML-Dateien?

  3. So übertragen Sie Dateien unter Linux mit SCP und Rsync

  4. So senden Sie Daten von einer Remote-SSH-Sitzung an die lokale Zwischenablage

  5. Wie kann ich zurück zum lokalen scp, wenn ich bereits auf den Remote-Computer geshshed habe?

Linux:So teilen Sie Dateien in einem lokalen Netzwerk mit woof

So teilen Sie Dateien sicher über die Befehlszeile mit ffsend in Linux

So laden Sie Dateien von Remote-Linux-Servern herunter

Wie kopiert man eine Datei von einem Remote-Server auf einen lokalen Computer?

So klonen Sie ein Git-Repository mit Ansible

Wie kann ich Dateien von einem Google Cloud Compute Server auf meinen lokalen Computer kopieren?