在Ansible的debug模块中以换行符显示
备忘录。
要解决的问题:在debug模块中,想要在日志中实际显示时将字符串中的换行符\n转换为换行。
在debug模块中,当显示包含换行符的字符串时,换行符会显示为\n,但不会执行换行操作。
Playbook例
剧本范例
- hosts: localhost
tasks:
- debug:
var: text
vars:
test: |
foo
bar
baz
- debug:
msg: "{{ text }}"
vars:
text: |
foo
bar
baz
提供示例
$ ansible-playbook site.yml
...
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"text": "foo\nbar\nbaz"
}
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "foo\nbar\nbaz\n"
}
...
希望以实际的换行显示,而不是作为原本的换行符号\n被展示出来。
解决方案1:stdout_callback = 使用community.general.yaml
引入了community.general collection。
$ ansible-galaxy collection install community.general
...
被引入到 ~/.ansible/collections/ansible_collections/community/general/ 中
在ansible.cfg中配置使用community.general.yaml作为stdout_callback。
[defaults]
#verbosity = 1
stdout_callback = community.general.yaml
执行结果 (Shí jié guǒ)
...
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] =>
text: |-
foo
bar
baz
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] =>
msg: |-
foo
bar
baz
...
被换行后输出。
由于在YAML中显示,所以有缩进。
由于有”|-“,即使最后有一个以上的换行符也不会被输出。
解决方案2:利用stdout_callback = ansible.posix.debug。
就我个人而言,我经常使用这个。
$ ansible-galaxy collection install ansible.posix
...
[defaults]
#verbosity = 1
stdout_callback = ansible.posix.debug
例子展示了产生输出的情况
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"text": "foo\nbar\nbaz\n"
}
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {}
MSG:
foo
bar
baz
...
如果var的情况下,换行代码显示为\n。
如果msg的情况下,换行代码将换行,没有缩进,并且最后的换行代码也不会被省略。