Wie kopiere ich alle Kinder außer einem in Ansible?

10

In dieser Dokumentation wird erläutert, wie Sie Dateien und Verzeichnisse mit dem copyModul in Ansible kopieren . Wie kopiere ich alle Kinder außer einem?

Diskussion

  1. Die Optionen klären nicht, wie dies getan werden könnte.
  2. Das individuelle Kopieren aller Kinder ist keine Option, da das Elternteil mehr als 100 Kinder enthält.
030
quelle
Sie fallen in das XY-Problem .
Henrik Pingel

Antworten:

12

Die beste Option wäre wahrscheinlich, das synchronizeModul zu verwenden.

synchronize ist ein Wrapper um den Befehl rsync, der allgemeine Aufgaben mit rsync vereinfachen soll.

Während das copyModul Dateien mit Python kopiert und in seiner Funktionalität eingeschränkt ist. In der Dokumentation zum Kopiermodul befindet sich ein Hinweis :

Die Funktion zum rekursiven Kopieren des Moduls „Kopieren“ lässt sich nicht auf viele (> Hunderte) Dateien skalieren. Eine Alternative finden Sie unter Synchronisierungsmodul, bei dem es sich um einen Wrapper um rsync handelt.

Mit dem synchronizeModul ist es möglich, excludeMuster rsync_optsan den rsyncvon Ansible ausgeführten Befehl zu übergeben.

# Synchronize passing in extra rsync options
synchronize:
    src: /tmp/helloworld
    dest: /var/www/helloword
    rsync_opts:
      - "--exclude=.git"

Das synchronizeModul weist jedoch einige Einschränkungen auf . Wie die Anforderung der rsyncInstallation auf lokalen und Remote-Computer. Deshalb würde ich es nicht benutzen, wenn es nicht gebraucht wird.

Henrik Pingel
quelle
4

Wenn ich nur verwenden copymüsste, würde ich Folgendes tun. In diesem Beispiel verwende ich patternsPython-spezifische Beispiele und a .hiddenfile(ich verwende Hidden, um zu demonstrieren, dass find viele Optionen zum Erkunden bietet). Die Grundidee ist jedoch, dass Sie Muster- / Regex-Filter verwenden können, um Ihren Anforderungen gerecht zu werden.

- name: prepare a list of files to copy from some place
  find:
    paths: /var/some-place
    hidden: yes
    patterns:
      - "*.py"
      - ".hiddenfile"
  delegate_to: localhost
  register: target_files

- name: copy files to other place
  copy:
    src: "{{ item.path }}"
    dest: /var/other-place
  with_items: "{{ target_files.files }}"
  tags:
    - copy
Krolique
quelle
Antwort ist super, hat perfekt für mich funktioniert. Wir können auch einige Dateien im
Suchmodul