Lors de l'écriture et du débogage des playbooks Ansible, le flux de travail typique est le suivant:
ansible-playbook ./main.yaml
Idéalement, j'aimerais reprendre l'exécution sur une tâche ayant échoué, disposer de l'inventaire et de tous les faits rassemblés par les tâches précédentes. Est-ce même possible? Comment rendre l'écriture/le débogage de playbook plus rapide?
Jetez un oeil à http://docs.ansible.com/playbooks_startnstep.html . Si vous souhaitez commencer à exécuter votre Playbook pour une tâche particulière, vous pouvez le faire avec le --start-at-task
option:
ansible-playbook playbook.yml --start-at-task="install packages"
Ce qui précède commencera à exécuter votre livre de jeu sur une tâche nommée "installer les packages" .
Alternativement, jetez un oeil à cette réponse précédente Comment exécuter une seule tâche dans ansible playbook?
Enfin, lorsqu'un jeu échoue, il vous donne généralement quelque chose comme:
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/user/site.retry
Utiliser ça --limit
commande et il devrait réessayer à partir de la tâche ayant échoué.
Futurs lecteurs:
Le --limit @/home/user/site.retry
_ ne serait d'aucun secours dans un tel scénario, le .retry
ne stocke que l'hôte en échec et rien de plus, alors il ne fera qu'exécuter toutes les tâches sur les hôtes en échec.
Si vous utilisez la dernière version (Ansible 2.x), le --start-at-task
ne fonctionne pas pour les tâches définies dans roles
.
Vous pouvez obtenir un effet similaire en utilisant simplement le --step
drapeau par exemple: ansible-playbook playbook.yml --step
. L'étape vous demande avant d'exécuter chaque tâche et vous pouvez choisir (N)o/(y)es/(c)ontinue
.
Avec cette approche, vous exécutez des tâches de manière sélective en cas de besoin et vous poursuivez également à partir du point où il a échoué, après des correctifs.
Future Future lecteurs:
À partir de Ansible 2.4.2.0 --start-at-task
fonctionne pour les tâches définies dans les rôles que j'ai créés.
L'équipe ansible n'est pas disposée à résoudre ce problème. Elle vous suggère de conserver vos rôles idempotents et de rejouer l'intégralité de la pièce. Je n'ai pas le temps. Dans mes rôles, je n'utilise pas énormément de faits comme @JeremyWhiting, je peux donc utiliser ceci --start-at-task
fonctionnalité.
Cependant, comme il s’agit toujours d’une tâche manuelle, j’ai écrit à la place quelques tours par minute et ajouté une fonction "Reprendre" qui suit ces étapes de base:
L'équipe ansible n'est pas disposée à créer cette fonctionnalité de base (et très utile), le seul choix est donc de la pirater via des scripts bash.