J'utilise un playbook ansible pour configurer Apache pour une liste de sites. Le playbook doit copier le modèle de configuration d'hôte virtuel pour chaque site en place, puis activer chaque site en utilisant 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
Je n'aime pas avoir à répéter la même liste pour chaque tâche. Comment configurer le playbook pour exécuter les deux tâches avec la même liste d'éléments?
loop
sur unblock
bloc. Cela semble être demandé, mais rejeté via Ansible GH numéro 13262 .:-(
J'ai trouvé une solution en utilisant des globes de fichiers. Étant donné que j'ai un fichier de configuration pour chaque site, je peux simplement utiliser la liste de ces fichiers pour les parcourir tous. De cette façon, je n'ai même pas une fois la liste des sites dans mon fichier de tâches, et encore moins deux fois. Tout ce que je dois faire pour ajouter un site est d'ajouter un fichier.
Pour rendre les choses un peu plus faciles, j'ai créé un répertoire pour les modèles:
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
Ensuite,
roles/webserver/tasks/main.yml
je peux utiliser cette liste de fichiers et quelques expressions régulières:Cette technique pourrait même être utilisée avec des fichiers factices vides pour créer une liste pour d'autres applications.
la source
Konstantin a donné une bonne réponse; en voici une saveur supplémentaire.
Je définirai généralement les listes comme des variables et j'écrirai simplement deux boucles distinctes sur la même variable:
Cela fonctionne bien avec la priorité des variables , par exemple en définissant différents ensembles de serveurs par environnement. Il fonctionne également lorsque vous devez effectuer diverses autres tâches non en boucle entre les deux boucles.
la source