1 votes

Comment exécuter différents rôles pour différents hôtes dans un seul playbook ansible ?

J'ai 3 playbook ansible.

my_ansible
 hosts
 play1.yaml
 play2.yaml
 play3.yaml
 roles
     role1
     role2
     role3

hôtes

[play1]
host1

[play2]
host2

[play3]
host3

Maintenant, quand je lance play3 Je veux courir. play2(role2) en host2 y play1(role1) en host1 .

Je vérifie, dépendance à l'égard des rôles mais qui s'appliquent au même hôte, ce qui signifie que si j'ajoute role-dependency en role3 para role1 y role2 alors ces 2 rôles seront opposés host3 .

Je veux être sûr, play1 fonctionne sur host1 seulement, play2 fonctionne sur host2 seulement et play3 fonctionne sur host3 seulement.

J'essaie de trouver le playbook dépendance, mais pas encore de chance.

S'il existe une meilleure façon de résoudre ce problème, je suis prêt à m'engager dans cette voie également.

2voto

Henrik Pingel Points 8426

Je suppose que le moyen le plus simple d'y parvenir est de créer un playbook maître et d'y définir l'ordre des playbooks.

Il est possible d'inclure des playbooks à l'intérieur d'un master playbook. [...] Les jeux et les tâches de chaque playbook listé seront exécutés dans l'ordre où ils sont listés, comme s'ils avaient été définis ici directement.

Siehe La documentation Ansible sur la réutilisation des playbooks comprend

Afin d'atteindre cet objectif play3 exécute play2 y play1 de même, il suffirait de définir un playbook maître comme celui-ci :

---
- import_playbook: play3.yml
- import_playbook: play2.yml
- import_playbook: play1.yml

1voto

Dylan Martin Points 538

Je ne suis pas sûr de comprendre, mais je pense que vous dites que votre problème est que vous ne voulez pas lancer le jeu 3 sans d'abord lancer le jeu 2 et le jeu 1 ?

Je ne connais pas de moyen de faire respecter cette règle, mais je peux penser à quelques façons de la rendre plus pratique.

Tout d'abord, il suffit de mettre les trois pièces dans un seul fichier, puis lorsque vous en lancez une, vous les lancez toutes. Si vous voulez lancer occasionnellement la lecture 1 sans la lecture 2 et la lecture 3, utilisez les balises. Avec les balises, vous pouvez faire en sorte que play1 et play2 aient la balise play3, ainsi vous ne lancerez jamais play3 sans play1 et play2 par accident.

Je mets généralement ma commande ansible-playbook dans un fichier script pour ne pas avoir à m'en souvenir. Si vous aimez faire cela, vous pouvez faire en sorte que le script lance les trois jeux. C'est particulièrement agréable lorsque vous avez des collègues de travail qui ne connaissent pas si bien ansible. EG je fais un fichier appelé run.sh qui contient :

ansible-playbook -i hosts myplay.yaml $@

En $@ est bash pour ajouter des args, donc je peux ensuite faire ./run.sh -t play1 et des trucs comme ça.

J'espère que cela vous aidera !

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