2016-08-12 5 views
1

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.

Antwort

0

Eine der möglichen Lösungen besteht darin, stdout_callback=json in einer konfigurierbaren Konfiguration zu setzen.
In diesem Fall wird die gesamte Ausgabe des Ansible-Playbooks im maschinenlesbaren JSON-Format vorliegen, sodass Sie sie auf Fehler überprüfen können.