Mein Anwendungsfall ist der folgende:
Ich habe eine Vorlagendatei und möchte aus dieser Vorlage zwei verschiedene Dateien erstellen, wobei die Variablen für jede Datei mit einem anderen Satz von Variablen gefüllt werden.
Angenommen, ich möchte die Datei mit der Zeile vorlegen:
mkdir -p {{myTemplateVariable}}
Ich möchte einen geeigneten Weg finden, um diese Variable mit "File1" und "File2" zu füllen. Etwas wie :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
wo ich für die erste Vorlage angeben könnte, dass die zu verwendende Variable a = "File1" und für die zweite b = "File2" ist.
ansible
ansible-template
Kestemont max
quelle
quelle
Antworten:
Für Ansible 2.x:
Für Ansible 1.x:
Leider unterstützt das
template
Modul keine Übergabe von Variablen an das Modul, die innerhalb der Vorlage verwendet werden können. Es gab eine Funktionsanfrage, die jedoch abgelehnt wurde.Ich kann mir zwei Problemumgehungen vorstellen:
1. Einschließen
Die
include
Anweisung unterstützt vorbei Variablen. Sie können Ihretemplate
Aufgabe also in einer zusätzlichen Datei speichern und zweimal mit den entsprechenden Parametern einfügen:my_include.yml:
main.yml:
2. Definieren Sie myTemplateVariable neu
Eine andere Möglichkeit wäre, myTemplateVariable direkt vor jeder
template
Aufgabe neu zu definieren .quelle
Mit Ansible 2.x können Sie
vars:
mit Aufgaben verwenden.Vorlage
test.j2
:Spielbuch:
Dadurch werden unterschiedliche
myTemplateVariable
Werte an test.j2 übergeben.quelle
Sie können dies sehr einfach tun, schauen Sie sich mein Supervisor-Rezept an:
job.conf.j2:
Ausgabe:
Genießen!
quelle
Dies ist eine Lösung / ein Hack, den ich verwende:
Aufgaben / main.yml:
vars / main.yml
templates / test.j2:
Nachdem Sie dies ausgeführt haben, gelangen Sie
this is var_a
in / tmp / templateA undthis is var_b
in / tmp / templateB.Grundsätzlich missbrauchen Sie
with_items
es, die Vorlage mit jedem Element in der Liste mit einem Element zu rendern. Dies funktioniert, weil Sie steuern können, was die Liste bei der Verwendung istwith_items
.Der Nachteil dabei ist, dass Sie
item
als Variablennamen in Ihrer Vorlage verwenden müssen.Wenn Sie auf diese Weise mehr als eine Variable übergeben möchten, können Sie als Listenelemente wie folgt diktieren:
und verweisen Sie dann in Ihrer Vorlage wie folgt darauf:
quelle
with_items: '{{ var_a }}'
Ich habe es so gemacht.
In Aufgaben / main.yml
und in vars / main.yml
und in templates / myTemplateFile.j2
Hoffe das löst dein Problem.
quelle
with_dict
ist die bessere Lösung.WICHTIG: Beachten Sie, dass ein Element nicht nur eine Zeichenfolge sein muss, sondern ein Objekt mit so vielen Eigenschaften sein kann, wie Sie möchten. Auf diese Weise können Sie eine beliebige Anzahl von Variablen übergeben.
In der Vorlage habe ich:
quelle
Ich hatte ein ähnliches Problem zu lösen. Hier ist eine einfache Lösung, wie Variablen an Vorlagendateien übergeben werden. Der Trick besteht darin, die Vorlagendatei unter Ausnutzung der Variablen zu schreiben. Sie müssen ein Wörterbuch erstellen (Liste ist ebenfalls möglich), das die Variablen enthält, die den einzelnen Dateien entsprechen. Greifen Sie dann innerhalb der Vorlagendatei darauf zu.
siehe unten:
das Spielbuch
quelle
Ein weiteres Beispiel aus der Praxis anhand einer Liste
ein Auszug für eine Vorlage für php.ini
Dies ist die var
Dann stelle ich damit bereit
quelle