Wie kann ich erfassen, wenn eine Aufgabe in einem ansible
Playbook fehlschlägt, daher schlägt der Lauf auch fehl?Erfassen von Ansible-Fehlern mit Fabric
Ich verwende fabric
, um den ansible-playbook
Befehl einzupacken, und das ist, was ich gerade benutze.
command = local(
"sudo ansible-playbook %s --extra-vars \"project=%s role=%s env=%s version=%s enterprise=%s\""
" --private-key ../inventory/keys/%s" %
(playbook, project, role, environment, version, enterprise, enterprise), capture=True)
if command:
if command.stderr:
print(cyan(command.stderr))
else:
print(green(command.stdout))
print(blue("\nConfigured %s [%s] in %s stack" %
(project, role, environment)))
else:
print(red("\nError configuring %s cloudformation resource stack:::: %s"
% role, command.stderr))
Wie Sie sehen können, habe ich den Befehl und ich erfassen die Ausgabe. Das Problem dabei ist, dass command.stderr
nur passiert, wenn der ansible-playbook
Befehl zum Beispiel fehlschlägt, wenn ansible
keine Verbindung zum Host usw. herstellen kann, aber nicht, wenn ein task
im Playbook fehlschlägt. Wenn das passiert, denkt mein Code immer noch, dass der Befehl erfolgreich ausgeführt wurde.
Beispiele unten; (Dies wird nicht durch command.stderr werden erfasst)
TASK [example.cloudformation : Launch cloudformation template] ****************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TemplateSyntaxError: expected name or number
fatal: [127.0.0.1]: FAILED! => {"failed": true, "msg": "Unexpected failure during module execution.", "stdout": ""}
to retry, use: --limit @example_stack_launch.retry
Ich vermute, dies mit ansible callbacks
zu tun hat, aber nicht wissen, wie sie entlarven und zu verwenden.