我在PGBouncer的Ansible游戏中显示了PGBouncer内置的统计模块的一些输出。
我的问题是,当Ansible将输出打印到终端时,它将破坏换行符。而不是看到
----------
| OUTPUT |
----------
我懂了
----------\n| OUTPUT |\n----------
有谁知道如何使Ansible“漂亮地打印”输出?
我在PGBouncer的Ansible游戏中显示了PGBouncer内置的统计模块的一些输出。
我的问题是,当Ansible将输出打印到终端时,它将破坏换行符。而不是看到
----------
| OUTPUT |
----------
我懂了
----------\n| OUTPUT |\n----------
有谁知道如何使Ansible“漂亮地打印”输出?
Answers:
在Ansible中,没有一种方法可以完成您本来想要做的事情。您可以作为解决方法:
ansible-playbook ... | sed 's/\\n/\n/g'
\n
出现在结果中,因此您可以在调试消息中使用此regexp:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
如果要更人性化的输出,请定义:
ANSIBLE_STDOUT_CALLBACK=debug
尽管不幸的是它的名字不那么冗长,而且人类更容易阅读,但是这将使调试输出模块(以前命名为human_log
)变得难以理解。
如果您收到此模块不可用的错误消息,请升级Ansible或在无法升级ansible的情况下在本地添加此模块,它将与ansible的2.0版或1.9以上版本一起使用。
另一个配置方法是添加stdout_callback = debug
到您的ansible.cfg
ANSIBLE_STDOUT_CALLBACK=yaml
。我喜欢它,因为fail
msg
当我提供一个对象时它的格式很好。
在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') }}"
我们基本上将其转换为列表,方法是用换行符将其分割,然后打印该列表。
ignore_errors: yes
到原始命令,然后添加类似`-assert:that:“ test.rc == 0”的命令。
您可以使用暂停模块:
- pause:
prompt: "{{ variable_blob.stdout }}"
通过定义分钟或秒而无需输入即可继续前进,但不会捕获用户输入。
信用:https : //github.com/ansible/ansible/issues/17446#issuecomment-245391682
sed -e 's/\\n/'$'\\\n/g'
。同样相关:comicjk.com/20