Comment exécuter plusieurs playbooks dans l'ordre avec Ansible?

16

Je travaille sur plusieurs playbooks Ansible pour faire tourner une nouvelle instance de serveur. Il y a environ 15 playbooks différents que je dois exécuter dans un ordre spécifique pour réussir à faire tourner un serveur.

Ma pensée initiale était d'écrire un script shell qui l'exécute ansible-playbook playbook_name.ymlet de le dupliquer une entrée pour chaque playbook que j'ai besoin d'exécuter.

Existe-t-il une façon plus intelligente / meilleure de le faire en utilisant un manuel de jeu principal et si oui, à quoi cela ressemblerait-il (des exemples sont appréciés).

Je pourrais écrire un playbook monolithique qui fait tout, mais il y a des jeux qui s'exécutent d'abord en tant que root puis en tant qu'utilisateur sudo plus tard.

nulltek
la source
2
utilisez include dans votre playbook principal docs.ansible.com/ansible/playbooks_roles.html
c4f4t0r
1
Pour gérer le cas de l'exécution en tant que root puis en tant qu'utilisateur sudo, vous pouvez utiliser la fonctionnalité de bloc - placez la become:partie à la fin de chaque bloc. Vous devrez peut-être créer une nouvelle lecture pour basculer l'utilisateur de la connexion de l'utilisateur root vers sudo.
RichVel

Réponses:

15

Créez de nombreux sous-playbooks et agrégez-les via des instructions d'inclusion.

- include: playbook-one.yml
- include: playbook-two.yml

Si vos playbooks doivent fonctionner dans l'ordre et si tous sont obligatoires, créez un playbook principal et incluez des fichiers avec des tâches. Un playbook devrait toujours être un processus fermé.

flxPeters
la source
2
pourriez-vous développer la dernière partie de votre réponse? que voulez-vous dire par "Un livre de jeu devrait toujours être un processus fermé." ?
Mike Vella
1
Existe-t-il un moyen de spécifier tous les playbooks à l'aide d'une expression régulière? Par exemple:- include : books/*.yml
blueskin
8
On dirait que includec'est obsolète. docs.ansible.com/ansible/latest/playbooks_reuse.html Je pense que import_playbook: fooc'est la bonne voie à suivre, mais je ne suis pas très expérimenté.
Andrew
11

Pour les versions plus récentes d'Ansilbe, vous pouvez créer de nombreux sous-playbooks et les agréger via des instructions import_playbook:

---
- import_playbook: A-systemd-networkd.yml
- import_playbook: B-fail2ban-ssh.yml
- import_playbook: C-enable-watchdog.yml
Peter Senna
la source