
Ich muss ein Playbook erstellen, das eine Vorlagendatei nimmt, einige Variablen interpoliert und die resultierende Datei in einem anderen Verzeichnis ablegt.
Der erste Teil des Problems besteht darin, dass die resultierende Datei als weiteres Ansible-Playbook verwendet wird, sodass die Quelldatei andere Interpolationen enthält und diese Interpolationen unverändert beibehalten werden müssen. Nehmen wir als Beispiel an, dass die Quelldatei etwa Folgendes enthält:
key1: {{ value1 }}
key2: {{ value2 }}
Der Wert von key1
muss von meinem Playbook interpoliert werden (er soll der Wert der Variable werden ), muss value1
aber gleichzeitig so belassen werden, wie er ist (er soll sein ).value2
{{ value2 }}
Der zweite Teil des Problems besteht darin, dass ich nicht einfach die Quelldatei ändern und vor den geschweiften Klammern Backslashes hinzufügen kann, da diese Datei von anderen Prozessen aktualisiert wird. Da die Vorlagendatei außerdem von Zeit zu Zeit aktualisiert wird, kann ich nicht vorhersagen, welche Variablen nach der nächsten Aktualisierung übersprungen werden müssen. Ich weiß nur, dass ich interpolieren muss value1
, aber ich kenne die Namen der anderen Variablen nicht (heute sind es value2
und value3
, morgen haben die Entwickler sie value2
in umbenannt value2_deprecated
und irgendwo hinzugefügt value3
).
Kann ich Ansible bitten, nur zu interpolieren value1
?
Danke schön.
Antwort1
Q:"Die Vorlage enthält Interpolationen und diese Interpolationen müssen unverändert beibehalten werden."
A: Standardvariablen deklarieren
lbr: '{{ "{{" }}'
rbr: '{{ "}}" }}'
value1: '{{ lbr }} value1 {{ rbr }}'
value2: '{{ lbr }} value2 {{ rbr }}'
und erstellen Sie die Vorlage
shell> cat template.yml.j2
key1: {{ value1 }}
key2: {{ value2 }}
Q:"Ich muss nur Wert1 interpolieren."
A: Überschreiben Sie den Standardwert, zB
- template:
src: template.yml.j2
dest: playbook.yml
vars:
value1: value1
gibt
shell> cat playbook.yml
key1: value1
key2: {{ value2 }}