使用Ansible显示输出


38

我在PGBouncer的Ansible游戏中显示了PGBouncer内置的统计模块的一些输出。

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

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

我懂了

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

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

Answers:


14

在Ansible中,没有一种方法可以完成您本来想要做的事情。您可以作为解决方法:

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

1
在OSX上,我不得不使用sed -e 's/\\n/'$'\\\n/g'。同样相关:comicjk.com/20
Navin

4
请参阅sorins回答serverfault.com/a/846232/240508,它是2017年的正确版本,并且可大于2.3
Vadimo

大多\n出现在结果中,因此您可以在调试消息中使用此regexp:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

62

如果要更人性化的输出,请定义:

ANSIBLE_STDOUT_CALLBACK=debug

尽管不幸的它的名字不那么冗长,而且人类更容易阅读,但是这将使调试输出模块(以前命名为human_log)变得难以理解。

如果您收到此模块不可用的错误消息,请升级Ansible或在无法升级ansible的情况下在本地添加此模块,它将与ansible的2.0版或1.9以上版本一起使用。

另一个配置方法是添加stdout_callback = debug到您的ansible.cfg


13
这应该是2017年接受的答案,人类友好的日志输出已开箱即用。
Vadimo

1
这里有一些更多的技巧可以使这个更永久:github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65 '18

1
或者ANSIBLE_STDOUT_CALLBACK=yaml。我喜欢它,因为fail msg当我提供一个对象时它的格式很好。
Marinos

13

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


2
注意:使用ansible 2.0.x,您需要从import继承CallbackBasefrom ansible.plugins.callback import CallbackBase以使回调类起作用。
allo

12

在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') }}"

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


这使shell输出更加清晰!真好!
阿斯潘德·卡齐

该解决方案似乎有一个主要缺点-如果“示例测试”模块的执行失败,通常整个剧本构建都会失败,并且您将永远看不到格式化的输出,尤其是可能最有趣的stderr输出。
勒内·

@René,您是对的。为此,您可以添加ignore_errors: yes到原始命令,然后添加类似`-assert:that:“ test.rc == 0”的命令。
jhutar


0

如果您希望以几乎模拟标准输出的格式查看它,则可以将debug回调插件与debugAnsible 2.7+中的模块一起使用,如下所示:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.