【问题标题】:Clean error output in ansible-playbook清除 ansible-playbook 中的错误输出
【发布时间】:2016-09-07 09:43:54
【问题描述】:

如果任何 Ansible 任务失败,有错误输出,playbook 将显示它换行符转义 '\n'。对于跨越多行的回溯,这使得它非常难以阅读。

有没有办法让 ansible-playbook 显示来自shellpipgit 和其他类似任务的未转义错误输出?

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    ansible.cfg 文件的 defaults 部分添加 stdout_callback=debugstderr_callback=debug

    [defaults]
    (...)
    stdout_callback=debug
    stderr_callback=debug
    

    这由 ansible > 2.0 支持

    【讨论】:

    • 这太不可思议了!为什么这不是默认的[default]!?
    • 我的标准输出以\t 结尾。我在 ansible 2.6.2 上尝试了这个配置。但我看不出有什么不同。有什么我想念的吗?
    • 我什么也没得到 :(
    • 什么是stderr_callback?它不在 v2.9 的源代码和文档中。
    【解决方案2】:

    从 Ansible 2.5 开始提供 YAML 输出。

    ansible.cfg[defaults] 部分添加这些行:

    stdout_callback = yaml
    stderr_callback = yaml
    

    如果你习惯了默认输出,这将改变你的生活!

    other output optionsminimaldebug 中,也提供了不错的 JSON 输出。

    【讨论】:

    • 我发现debug 选项在事情没有中断时会抛出大量多余的空格,尤其是对于调试语句。设置yaml 提供了易于阅读的格式,没有空格。
    【解决方案3】:

    Ansible Callbacks 回调是更有趣的插件类型之一。向 Ansible 添加额外的回调插件允许在响应事件时添加新的行为。

    Human-Readable Ansible Playbook Log Output Using Callback Plugin.

    【讨论】:

    【解决方案4】:

    如果是针对任何特定任务,debug 模块都可以使用。要查看 shell 或任何命令的输出,首先使用以下命令将其注册到变量中:

    ....
    register: shell_output
    
    - name: View Clear Output
      debug: 
        var: shell_output
    

    这个输出也可以用 json 解析。使用shell_output_to_json

    【讨论】:

      【解决方案5】:

      下面是一个快速而肮脏的修复方法

      echo -en "$(<some ansible command>)"
      

      【讨论】:

        【解决方案6】:

        Ansible 确实关注stdout_callback,并且可以使用支持的插件之一(可以使用ansible-doc -t callback -l 列出)。

        虽然stderr_callback 似乎不再受支持。我找不到为 OUT 和 ERR 分别输出的方法。

        【讨论】:

          猜你喜欢
          • 2020-03-29
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多