题 使用Ansible显示输出


我有一个 PGBouncer的Ansible游戏 显示内置于PGBouncer的统计模块的一些输出。

我的问题是,当Ansible将输出打印到终端时,它会破坏换行符。而不是看到

----------
| OUTPUT |
----------

我知道了

----------\n| OUTPUT |\n----------

有谁知道如何让Ansible“漂亮地打印”输出?


31
2017-10-28 04:11




你可能想要改变你的答案,因为插件变体比sed更好。 - sorin


答案:


没有办法在Ansible中本地执行您想要的操作。 您可以将此作为解决方法:

ansible-playbook ... | sed 's/\\n/\n/g'

13
2017-10-28 15:23



在OSX上我不得不使用 sed -e 's/\\n/'$'\\\n/g'。也相关: comicjk.com/20 - Navin
看到sorins回答 serverfault.com/a/846232/240508 这是2017年的正确,ansible> 2.3 - Vadimo
大多 \n 出现在结果中,因此您可以在调试消息中使用此正则表达式: msg: "{{ result.stdout | regex_replace('\\n', '\n') }}" - klml


如果你想要更友好的输出定义:

ANSIBLE_STDOUT_CALLBACK=debug

这将使ansible使用调试输出模块(以前命名为 human_log)whinch 尽管名字不幸 人类不那么冗长,也更容易阅读。

如果您收到此模块不可用的错误,请升级Ansible或在本地添加此模块,如果您无法升级ansible,它将适用于2.0版或probaly甚至1.9版的ansible版本。

配置此选项的另一个选项是添加 stdout_callback = debug 到你的ansible.cfg


43
2018-04-24 13:20



这应该是 公认 在2017年回答人类友好的日志输出是开箱即用的。 - Vadimo
非常好的回答thanx - Jean-Bernard Jansen
这里有一些提示可以使它更永久: github.com/ansible/ansible/issues/27078#issuecomment-364560173 - kramer65


您可以使用回调插件。这将重新解析您的输出,并可轻松打开和关闭。


13
2018-04-16 17:27



注意:使用ansible 2.0.x,您需要继承 CallbackBase 进口的 from ansible.plugins.callback import CallbackBase 使回调类工作。 - allo


发现 这个 Ansible Project小组论坛中的方式:

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

我们基本上将它转换为列表,方法是将其拆分为换行符,然后打印该列表。


10
2017-09-30 09:53



这使得shell输出更加清晰!太好了! - Asfand Qazi
这个解决方案似乎有一个主要缺点 - 如果“示例测试”模块的执行失败,通常整个playbook构建失败,你将永远不会看到格式化的输出,特别是stderr可能最有趣的输出。 - René
@René你是对的。为此你可以添加 ignore_errors: yes 原始命令以及之后的类似` - assert:that:“test.rc == 0”。 - jhutar