在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的情况下,换行代码将换行,没有缩进,并且最后的换行代码也不会被省略。

bannerAds