使用 Ansible 显示输出

mja*_*day 57 ansible

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

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

----------
| OUTPUT |
----------
Run Code Online (Sandbox Code Playgroud)

我懂了

----------\n| OUTPUT |\n----------
Run Code Online (Sandbox Code Playgroud)

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

sor*_*rin 118

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

ANSIBLE_STDOUT_CALLBACK=debug
Run Code Online (Sandbox Code Playgroud)

这将使 ansible 使用调试输出模块(以前称为human_log),尽管它不幸的名称不那么冗长并且更容易被人类阅读。

如果您收到此模块不可用的错误,请升级 Ansible 或在无法升级 ansible 的情况下在本地添加此模块,它将适用于超过版本的 ansible,例如 2.0 或什至可能是 1.9。

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

  • 这应该是 2017 年的 *ACCEPTED* 答案,人类友好的日志输出开箱即用。 (18认同)
  • 或者`ANSIBLE_STDOUT_CALLBACK=yaml`。我更喜欢它,因为当我提供一个对象时,它会格式化很好的 `fail` `msg`。 (11认同)
  • 这里有一些更持久的提示:https://github.com/ansible/ansible/issues/27078#issuecomment-364560173 (2认同)

jar*_*arv 17

没有办法在 Ansible 中做你想做的事情。您可以将此作为解决方法:

ansible-playbook ... | sed 's/\\n/\n/g'
Run Code Online (Sandbox Code Playgroud)

  • 参见 sorins 回答 https://serverfault.com/a/846232/240508,这是 2017 年的正确答案,并且 ansible >2.3 (6认同)
  • 不幸的是,这样做会消除您在 ansible 输出中获得的漂亮且有用的着色 (3认同)

jhu*_*tar 17

在 Ansible 项目组论坛中找到这种方式:

- 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') }}"
Run Code Online (Sandbox Code Playgroud)

我们基本上通过用换行符将其拆分然后打印该列表来将其转换为列表。


xdd*_*dsg 13

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

  • 注意:在 ansible 2.0.x 中,您需要从使用 ``from ansible.plugins.callback import CallbackBase`` 导入的 ``CallbackBase`` 继承,以便回调类工作。 (2认同)