Ich verwende ein ansible Playbook, um Apache für eine Liste von Sites zu konfigurieren. Das Playbook muss die Konfigurationsvorlage für den virtuellen Host für jede Site kopieren und dann jede Site aktivieren, indem Sie a2ensite
:
- name: Install apache site conf
template: src=apache-sites-{{item}}-conf.j2 dest=/etc/apache2/sites-available/{{item}}.conf mode=0644
with_items:
- sitea
- siteb
- sitec
- sited
- name: Enable site apache conf
command: a2ensite {{item}}
args:
creates: /etc/apache2/sites-enabled/{{item}}.conf
with_items:
- sitea
- siteb
- sitec
- sited
Ich mag es nicht, für jede Aufgabe dieselbe Liste wiederholen zu müssen. Wie konfiguriere ich das Playbook so, dass beide Aufgaben mit derselben Liste von Elementen ausgeführt werden?
loop
einblock
Block. Dies scheint angefordert, aber über die Ansible GH-Ausgabe 13262 abgelehnt zu werden .:-(
Ich habe eine Lösung mit File Globs gefunden. Da ich für jede Site eine Konfigurationsdatei habe, kann ich einfach die Liste dieser Dateien verwenden, um alle zu durchlaufen. Auf diese Weise habe ich die Liste der Websites nicht einmal in meiner Aufgabendatei, geschweige denn zweimal. Alles, was ich tun muss, um eine Site hinzuzufügen, ist eine Datei hinzuzufügen.
Um die Sache etwas einfacher zu machen, habe ich ein Verzeichnis für die Vorlagen erstellt:
roles/webserver/templates/apache-sites/sitea.conf.j2
roles/webserver/templates/apache-sites/siteb.conf.j2
roles/webserver/templates/apache-sites/sitec.conf.j2
roles/webserver/templates/apache-sites/sited.conf.j2
Dann
roles/webserver/tasks/main.yml
kann ich in diese Liste von Dateien und einige reguläre Ausdrücke verwenden:Diese Technik kann sogar mit leeren Dummy-Dateien verwendet werden, um eine Liste für andere Anwendungen zu erstellen.
quelle
Konstantin gab eine gute Antwort; Hier ist ein zusätzlicher Geschmack drauf.
Ich werde die Listen üblicherweise als Variablen definieren und einfach zwei separate Schleifen über dieselbe Variable schreiben:
Dies funktioniert gut mit variabler Priorität , indem beispielsweise verschiedene Servergruppen pro Umgebung definiert werden. Dies funktioniert auch, wenn Sie verschiedene andere Aufgaben ohne Schleife zwischen den beiden Schleifen ausführen müssen.
quelle