Ich benutze ansible, um einige Swatch Conf-Dateien zu erstellen, um es so flexibel wie möglich zu machen, um verschiedene Aktionen zu ermöglichen. Ich stecke in einer Nested-Schleife in der .j2-Datei fest. Ich habe die ansible Vars wie so:Verschachtelte Schleife in einem Ansible Jinja Vorlage
swatch_files:
- name: 'syslog'
tail: '/var/log/syslog'
watchfor:
-
string: 'Stupid FIrst String'
actions:
-
action: "1/2 Slack blah blah action"
threshold: "Threshold For This first Action"
actions:
-
action: "2/2 Slack blah blah action"
threshold: "Threshold For This second Action"
-
string: 'Crappy Second String'
actions:
-
action: "1/2 Slack blah blah action"
threshold: "Threshold For This 1 Action"
actions:
-
action: "2/2 Slack blah blah action"
threshold: "Threshold For This 2 Action"
Die Aufgabe in der Tat die Datei nicht erstellen:
- name: Swatch | Create the Monit swatch conf files template:
src="swatch.monit.j2"
dest="/etc/monit/conf.d/{{ item.name }}.conf"
owner=root
group=root
mode=0700 with_items: swatch_files tags:
- monit
Und meine swatch.conf.j2 Datei sieht wie folgt aus:
{% for watchfor in item.watchfor recursive %}
watchfor /{{ watchfor.string }}/
{% for actions in watchfor.actions %}
Action: {{ actions.action }}
Threshold: {{ actions.threshold }}
{% endfor %}
{% endfor %
Aber Meine /etc/swatch/syslog.conf endet wie folgt:
watchfor /Stupid FIrst String/
Action: 2/2 Slack blah blah action
Threshold: Threshold For This second Action
watchfor /Crappy Second String/
Action: 2/2 Slack blah blah action
Threshold: Threshold For This 2 Action
Es geht durch die Schleife {% for watchfor in item.watchfor recursive%}, aber dann habe ich die {% für Aktionen in watchfor.actions%} irgendwie falsch. Es schreibt nur die zweite Aktion und den Schwellenwert. Ich nehme an, es überschreibt die erste?
Danke, @udondan, das war in der Tat mein Problem. – Blake