Gibt es eine einfache Möglichkeit, einen Ordner mit dem Ordner template .j2 in einer Linux-Box bereitzustellen, der denselben Namen wie die Vorlage verwendet, jedoch ohne die Erweiterung .j2, anstatt das Vorlagenmodul für jede Datei zu verwenden?
Im Moment habe ich eine lange Liste von:
- name: create x template
template:
src=files/x.conf.j2
dest=/tmp/x.conf
owner=root
group=root
mode=0755
notify:
- restart myService
with_fileglob
funktioniert immer abfiles/
, mit können Sie zu Vorlagen gelangen../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680regex_replace
am Ende der Zeile\.j2$
für Fälle übereinstimmen sollte, in denen das Muster möglicherweise im Dateinamen enthalten ist.Michael DeHaan (Schöpfer von Ansible) hat einen Beitrag auf CoderWall verfasst , in dem es um ein sehr ähnliches Thema geht. Sie können es an Ihre Anforderungen anpassen und erweitern (z. B. Berechtigungen und Eigentumsrechte). Ein relevanter Teil des Beitrags ist hier:
Dies kann durch die Verwendung von "
with_items
" und einer einzelnennotify
Anweisung vereinfacht werden . Wenn sich eine der Aufgaben ändert, wird der Dienst genau so benachrichtigt, wie er am Ende der Playbook-Ausführung neu gestartet werden muss.Beachten Sie, dass wir, da wir Aufgaben haben, die mehr als ein eindeutiges Argument enthalten, nicht nur "
item
" in dertemplate:
Zeile ' ' angeben , sondernwith_items
mit einer Hash-Variablen (Wörterbuch) verwenden. Sie können es auch etwas kürzer halten, indem Sie Listen verwenden, wenn Sie möchten. Dies ist eine stilistische Präferenz:Natürlich können wir auch die Liste, über die Sie gegangen sind, in einer "
groupvars/webservers
" anderen Datei definieren, z. B. eine Datei, in der alle für diewebservers
Gruppe benötigten Variablen definiert werden , oder eine YAML - Datei, die aus dervarsfiles
Direktive " " im Playbook geladen wird . Schauen Sie, wie das aufräumen kann, wenn wir es tun.quelle
template: src=templates/{{item}}.j2 dest=/etc/splat/{{item}}.conf
und dann eine einfache Liste von Elementen zu verwenden:with_items: - foo - bar
template: src={{item.src}} dest={{item.dest}}
(also nicht${var}
, sondern{{var}}
)Die Antwort von Russel funktioniert, ist aber verbesserungswürdig
Erstens muss das $ gehen, da es im regex_replace ein falscher regulärer Ausdruck war. Zweitens sollten sich alle Dateien im Dateiverzeichnis und nicht im Vorlagenverzeichnis befinden
quelle
Ich habe ein Dateibaum-Such-Plugin geschrieben, das bei Aktionen in Dateibäumen helfen kann.
Sie können Dateien in einem Dateibaum rekursiv bearbeiten und anhand von Dateieigenschaften Aktionen ausführen (z. B. Vorlage oder Kopie). Da der relative Pfad zurückgegeben wird, können Sie den Dateibaum auf den Zielsystemen problemlos neu erstellen.
Es sorgt für lesbarere Spielbücher.
quelle
Mit dem folgenden Befehl konnte ich eine rekursive Suche nach j2-Dateien in Vorlagen durchführen und diese an das Ziel verschieben. Ich hoffe, es hilft jemandem, der nach einer rekursiven Kopie der Vorlagen zum Ziel sucht.
quelle
Es besteht die Möglichkeit, die Liste der aktuellen Dateien automatisch aus dem Verzeichnis zu holen und anschließend zu iterieren.
quelle
print0
, wie z. B.find
und dann zu teilen\u0000
.