2016-08-12 6 views
1

Как я могу захватить, когда задача в playbook ansible сбой, следовательно, сбой тоже не работает?Захват Ошибки с ошибкой с помощью Fabric

Я использую fabric, чтобы обернуть команду ansible-playbook, и это то, что я сейчас использую.

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)) 

Как вы можете видеть, у меня есть команда, и я беру вывод. Проблема заключается в том, что command.stderr происходит только тогда, когда команда ansible-playbook не работает, например, когда ansible не может подключиться к хосту и т. Д., Но не тогда, когда task в проигрывателе сработает. когда это происходит, мой код все еще считает, что команда действительно успешно завершена.

Примеры ниже; (Это не захвачен command.stderr)

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 

Я предполагаю, что это связано с ansible callbacks, но не знаю, как выставлять и использовать их.

ответ

0

Одним из возможных решений является установка stdout_callback=json в незаменимой конфигурации.
В этом случае выход всех воспроизводимых игр будет в машиночитаемом формате json, поэтому вы можете проверить его на наличие ошибок.