Wie kann ich in einer Aufgabe mehr als eine einzelne Datei von Ansible auf Remote-Knoten kopieren?
Ich habe versucht, die Kopiermodulzeile in meiner Aufgabe zu duplizieren, um Dateien zu definieren, aber es wird nur die erste Datei kopiert.
Sie können die with_fileglob
Schleife dafür verwenden:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
/roles/db/files
aber ich kann es mit dieser Methode nicht zum Laufen bringen. Ich habe es versucht,with_fileglob: - /roles/db/file/*
aber es wird den Weg nicht gutquelle
dest
Menge als Variable zu haben?{ src: 'containerizers', dest: {{ containerizers }} }
.{ src: '{{ source.var }}', dest: '{{ dest.var }}' }
Sie können with_together für diesen Zweck verwenden:
quelle
Wenn Sie mehr als einen Standort benötigen, benötigen Sie mehr als eine Aufgabe. Eine Kopieraufgabe kann nur von einem Speicherort (einschließlich mehrerer Dateien) an einen anderen auf dem Knoten kopiert werden.
quelle
quelle
find
Modul nur für ansible 2.x funktioniert, aber nicht für ansible 1.xstdout_lines
im Rückgabewert angegeben haben, sie jedoch nicht für dasfind
Modul gilt. Es hat nurfiles
,examined
undmatched
als Rückgabewert. Hoffe, dass anderen helfenfind
scheint nur auf das entfernte System zu schauen und erlaubt nicht, irgendetwas vom verwaltenden Knoten zu holen. Diese Antwortenwith_fileglob
scheinen passender zu sein: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 .Seit Ansible 2.5 sind die
with_*
Konstrukte veraltet und dieloop
Syntax sollte verwendet werden. Ein einfaches praktisches Beispiel:quelle
Oder Sie können with_items verwenden:
quelle
quelle
Sie können eine Variable mit einer Liste von Verzeichnissen durchlaufen:
quelle
Verwenden Sie den folgenden Quellcode, um mehrere Dateien auf Ihren Clientcomputer zu kopieren.
Hinweis:
Wenn Sie mehrere Pfade mithilfe von Variablen übergeben, dann
src: "/ root / {{item}}"
Wenn Sie den Pfad übergeben, indem Sie eine Variable für verschiedene Elemente verwenden, dann
src: "/ root / {{item.source_path}}"
quelle
copy
Modul ist ein falsches Tool zum Kopieren vieler Dateien und / oder Verzeichnisstrukturen. Verwenden Siesynchronize
stattdessen das Modul, dasrsync
als Backend verwendet wird. Allerdings muss esrsync
sowohl auf dem Controller als auch auf dem Zielhost installiert sein. Es ist wirklich mächtig, überprüfen Sie ansible Dokumentation .Beispiel - Kopieren Sie Dateien aus dem
build
Verzeichnis (mit Unterverzeichnissen) des Controllers in das/var/www/html
Verzeichnis auf dem Zielhost:quelle