L'une de mes tâches ansibles importe une base de données Oracle à l'aide de impdp
.
Cela génère beaucoup de sortie vers la console, j'ai donc réglé no_log: True
.
Cependant, lorsque cela échoue, je veux voir le journal!
Comment puis-je créer ce journal de tâches particulier dans un fichier et non dans la console?
failed_when
condition, et de supprimer le fichier journal, si le précédent. tâche réussie :)-vvv
après laansible-playbook
commande pour obtenir des journaux détaillés.Réponses:
[Conversion de mon commentaire en réponse]
Une façon de le faire serait d'écrire les journaux dans un fichier externe, puis d'avoir une tâche après celle-ci qui utilise la condition failed_when, et de supprimer le fichier journal, si la tâche précédente a réussi.
Quelque chose comme ça devrait vous aider.
Remarque: Ce n'est peut-être pas la meilleure façon de gérer votre problème. Mais, c'était un hack qui m'a aidé à faire mon logging et mon monitoring.
la source
Je pense que tout ce que vous devez faire est d'enregistrer la sortie de chaque commande dont vous avez besoin (la stocker dans une variable), puis simplement vider la variable dans un fichier. De cette façon, vous pouvez le revoir plus tard.
Puis dans dumpall.j2:
L'exemple que j'utilise vient d' ici
la source
J'ai résolu cela en ajoutant
à la tâche no_log. Cela rend ansible continuer à la tâche suivante, même lorsque la tâche échoue. Ensuite, pour la tâche suivante, définissez une tâche de débogage, qui échoue toujours et génère la variable enregistrée, mais ne s'exécute que lorsque la tâche précédente a échoué:
Donc, même avec no_log: true, cela rendra ansible afficher la sortie de la tâche ayant échoué. Cette solution ne l'enregistre pas dans un fichier comme demandé, mais répond pleinement à votre besoin de `` voir le journal en cas d'échec '', et bien sûr, vous pouvez rediriger ou utiliser tee pour sortir la sortie ansible complète dans un fichier, ce qui, avec cette solution contiennent également le journal de la tâche ayant échoué.
la source
Ce que je fais quand j'ai une commande à exécuter et que je souhaite obtenir le journal uniquement en cas d'échec est comme suit (préfixé par un shell et comme
/bin/sh -c '...'
si l'initiateur n'utilise pas d'system
appel ou n'exécute pas la commande directement sans shell) :Cela redirigera l'erreur et la sortie standard vers un fichier et affichera le contenu du fichier en cas d'échec uniquement. Si la commande est très verbeuse et que vous ne souhaitez pas conserver le journal quand c'est ok vous pouvez aller avec:
Citation
&&
et||
utilisation de la page de manuel sh :Ce n'est probablement pas la façon la plus idiomatique de le faire avec ansible mais a l'avantage d'être très portable avec tout système de gestion de configuration donnant la possibilité d'afficher la commande stdout.
la source
En supposant qu'ansible renvoie correctement les erreurs à stderr, vous pouvez capturer la sortie des erreurs dans n'importe quel programme vers un fichier en utilisant la redirection de sortie:
some command 2> error.log
Cependant, je ne pense pas que ce soit le cas.
Au lieu de cela, vous voudrez probablement vous référer à ce guide pour décider quand des erreurs se produiront http://docs.ansible.com/ansible/playbooks_error_handling.html puis grep votre sortie pour les chaînes qui indiquent une erreur avant de sortir dans un fichier
c'est à dire.
ansible-playbook my-playbook | grep 'error' > error.log
la source
Je pense que ce que vous cherchez pourrait être trop simplement rediriger stdout et street vers un fichier.
En règle générale, some-command &> logfile.log
ou une variante ....
la source
Tee sera un outil très simple pour la journalisation, vous pouvez vous référer à la commande suivante.
la source