J'ai un ensemble assez complexe de Playbooks et de Rôles importés pour construire une plateforme d'applications. Tout est défini dans un seul hosts.ini
et l'on fait un usage intensif des groupes pour identifier les rôles des serveurs spécialisés : web, base de données, recherche, etc.
Cependant, la plateforme globale supporte deux instances distinctes de l'application et, dans certains cas, je dois établir des liens spécifiques entre deux des quatre nœuds web. Par exemple, pour la liste d'hôtes ci-dessous, je veux configurer des volumes gluster entre app1_node1 et app1_node2, et app2_node1 et app2_node2.
[web]
app1_node1
app1_node2
app2_node1
app2_node2
Et j'ai un playbook qui fait cela, mais seulement pour deux noeuds à la fois. Donc si le fichier hosts contient aussi ce qui suit :
[webapp1]
app1_node1
app1_node2
[webapp2]
app2_node1
app2_node2
et le playbook est invoqué avec --limit=webapp1
(ou webapp2) tout fonctionne bien.
Mais je ne suis pas sûr de la meilleure façon de construire tout en une seule fois . Je pourrais, par exemple, dupliquer le playbook et avoir des déclarations d'hôtes différentes dans chacun. Mais cela ne semble pas être une bonne idée.
La meilleure solution que j'ai trouvée est d'avoir un lanceur de playbook intermédiaire qui ressemble à ceci :
---
- name: PLAYBOOK playbook_launcher.yml
hosts: webapp1
tasks:
- name: Include playbook
import_playbook: theplaybook.yml
- hosts: webapp2
tasks:
- name: Include playbook
import_playbook: theplaybook.yml
Avec le livre de jeu actuel ayant une déclaration d'hôtes plus large.
---
- name: PLAYBOOK theplaybook.yml
hosts: web