Korzystam z odpowiedniego podręcznika, aby skonfigurować Apache dla listy witryn. Poradnik musi skopiować szablon konfiguracji hosta wirtualnego dla każdej witryny na miejsce, a następnie włączyć każdą witrynę za pomocą 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
Nie lubię powtarzać tej samej listy dla każdego zadania. Jak skonfigurować podręcznik, aby wykonywać oba zadania z tą samą listą przedmiotów?
loop
nablock
bloku. Wydaje się, że jest to wymagane, ale odrzucone przez numer 13262 Ansible GH .:-(
Znalazłem rozwiązanie za pomocą globów plików. Ponieważ mam plik konfiguracyjny dla każdej witryny, mogę po prostu użyć listy tych plików, aby wykonać iterację po wszystkich. W ten sposób nie mam listy witryn w moim pliku zadań ani razu, ani tym bardziej dwukrotnie. Wszystko, co muszę zrobić, aby dodać stronę, to dodać plik.
Aby trochę ułatwić, stworzyłem katalog szablonów:
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
Następnie
roles/webserver/tasks/main.yml
mogę użyć tej listy plików i niektórych wyrażeń regularnych:Tę technikę można nawet zastosować przy pustych plikach zastępczych, aby utworzyć listę dla innych aplikacji.
źródło
Konstantin udzielił dobrej odpowiedzi; tutaj jest dodatkowy smak.
Zwykle będę definiować listy jako zmienne i po prostu napiszę dwie osobne pętle nad tą samą zmienną:
Działa to dobrze ze zmiennym priorytetem , na przykład poprzez definiowanie różnych zestawów serwerów dla środowiska. Działa również, gdy trzeba wykonać różne inne niepętlowe zadania pomiędzy dwiema pętlami.
źródło