1 votes

Ansible (V2.8) Contrôle fin pour limiter l'exécution du playbook à un sous-ensemble de nœuds.

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

Est-ce la meilleure approche, ou est-ce que je rate quelque chose d'évident dans le fonctionnement d'Ansible qui rendrait cela plus facile ?

0voto

meguest Points 16

Essayez d'utiliser :

--limit=webapp1:webapp2

0 votes

Les caractères génériques sont également une option. utilisez un caractère variable dans le champ "host". - host : "{{ myhosts }}"

0 votes

Les jokers sont également une option et peuvent être passés comme une variable supplémentaire. utilisez la variable dans le champ host. - host : "{{ myhosts }}" --- Invoquer le playbook par ansible-playbook -i <inventory> -e "myhosts=webapp*" ------ OR Si le nom d'hôte contient les mêmes motifs de nom... [webapp_gluster:children] webapp_glusterfs1 webapp_glusterfs2 [webapp_glusterfs1] webapp[01:02].example.com [webapp_glusterfs1] webapp[03:04].example.com Maintenant, nous pouvons invoquer le playbook avec -e "myhost=webapp_gluster"

0 votes

Le fait de mettre une liste après --limit est une solution très pratique. Mais je préfère ma solution, car j'aime que la position par défaut soit que l'exécution du playbook site.yml sans --limit construise tout, et j'aime limiter --limit au moment où je construis un sous-ensemble de l'environnement global. De plus, la commande ansible-playbook est déjà assez chargée (--inventory --private-key, --ask-vault-pass), et ajouter --limit ou --extra_vars tout le temps la rend encore plus compliquée. Votre dernière solution fonctionnerait probablement bien dans cette situation, mais ne serait pas vraiment adaptée à 10 ou 20 instances de l'application.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X