Ansible建议:通过进行设置(stdout_callback = debug),可以显著提高任务错误等结果输出的可读性

摘要

当在ansible.cfg的[defaults]节中设置stdout_callback = debug(或yaml),ansible-playbook日志显示更易读,例如任务失败时(但是yaml可能存在日语显示问题)。

补充说明 2022/04: 引入前提集合。

可能是从ansible core 2.10版本开始,它们已被转移到了集合中,并且需要引入集合。(在ansible [core 2.12.3]中确认)

ansible-galaxy collection install ansible.posix      # stdout_callback = ansible.posix.debug用
ansible-galaxy collection install community.general  # stdout_callback = community.general.yaml用

最好在指定的时间使用全名指定。

[defaults]
verbosity = 1
stdout_callback = ansible.posix.debug
# stdout_callback = community.general.yaml

参考来源:

请参考以下链接:

战术剧本示例

- hosts: all
  gather_facts: false
  tasks:

  - name: 日本語複数行出力
    shell: |
      echo "あいうえお
      かきくけこ"

  - name: 日本語複数行出力後にエラー
    shell: |
      echo "あいうえお
      かきくけこ"
      exit 99

在第二项任务中,通过使用exit 99来作为错误退出。

在ansible.cfg中未进行指定。

# ansible-playbook -i localhost, -c local site.yml

PLAY [all] **************************************************************************************************************

TASK [日本語複数行出力] **************************************************************************************************
changed: [localhost]

TASK [日本語複数行出力後にエラー] ****************************************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "echo \"あいうえお\nかきくけこ\"\nexit 99\n", "delta": "0:00:00.002494", "end": "2021-07-15 22:10:05.189742", "msg": "non-zero return code", "rc": 99, "start": "2021-07-15 22:10:05.187248", "stderr": "", "stderr_lines": [], "stdout": "あいうえお\nかきくけこ", "stdout_lines": ["あいうえお", "かきくけこ"]}

PLAY RECAP **************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

如果正常结束,则不会显示详细结果。
如果以错误结束,则会显示详细结果,但可读性差。

在ansible.cfg中设置verbosity = 1和stdout_callback = debug。

[defaults]
verbosity = 1
stdout_callback = debug

使用 `-v` 参数相当于 `verbosity = 1`。这样可以在成功时显示结果的详细信息。
通过 `stdout_callback = debug`,可以将结果详细信息格式化为 JSON,并显示出来。

# ansible-playbook -i localhost, -c local site.yml
Using /root/roles/jp-stdout_callback/ansible.cfg as config file

PLAY [all] **************************************************************************************************************

TASK [日本語複数行出力] **************************************************************************************************
changed: [localhost] => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "cmd": "echo \"あいうえお\nかきくけこ\"\n",
    "delta": "0:00:00.002483",
    "end": "2021-07-15 22:12:55.306966",
    "rc": 0,
    "start": "2021-07-15 22:12:55.304483"
}

STDOUT:

あいうえお
かきくけこ

TASK [日本語複数行出力後にエラー] ****************************************************************************************
fatal: [localhost]: FAILED! => {
    "changed": true,
    "cmd": "echo \"あいうえお\nかきくけこ\"\nexit 99\n",
    "delta": "0:00:00.002687",
    "end": "2021-07-15 22:12:55.487638",
    "rc": 99,
    "start": "2021-07-15 22:12:55.484951"
}

STDOUT:

あいうえお
かきくけこ


MSG:

non-zero return code

PLAY RECAP **************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

无论是正常终止还是异常终止,都会将结果详情按整理成易于阅读的JSON形式显示出来。
此外,标准输出(STDOUT)、标准错误输出(STDERR)以及信息提示(MSG)等也会在解释了制表符和换行符后正确显示出来。

将ansible.cfg文件中的verbosity = 1和stdout_callback = yaml进行配置。

另外,当设置stdout_callback = yaml时,输出将显示为YAML格式,更简洁。然而,在至少ansible 2.9.10、Python 2.7.5、CentOS Linux 7 (Core)环境中,尚未确认是否支持多个日语行的输出。
2022/04更新:在MacOS 12.3 + ansible [core 2.12.3]中,已确认支持多个日语行的输出。

[defaults]
verbosity = 1
stdout_callback = yaml
# ansible-playbook -i localhost, -c local site.yml
Using /root/roles/jp-stdout_callback/ansible.cfg as config file

PLAY [all] **************************************************************************************************************

TASK [日本語複数行出力] **************************************************************************************************
changed: [localhost] => changed=true
  ansible_facts:
    discovered_interpreter_python: /usr/bin/python
  cmd: |-
    echo "
    "
  delta: '0:00:00.002571'
  end: '2021-07-15 22:29:06.502209'
  rc: 0
  start: '2021-07-15 22:29:06.499638'
  stderr: ''
  stderr_lines: <omitted>
  stdout: |2+

  stdout_lines: <omitted>

TASK [日本語複数行出力後にエラー] ****************************************************************************************
fatal: [localhost]: FAILED! => changed=true
  cmd: |-
    echo "
    "
    exit 99
  delta: '0:00:00.002860'
  end: '2021-07-15 22:29:06.690787'
  msg: non-zero return code
  rc: 99
  start: '2021-07-15 22:29:06.687927'
  stderr: ''
  stderr_lines: <omitted>
  stdout: |2+

  stdout_lines: <omitted>

PLAY RECAP **************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

请参考1的stdout回调函数。

 

    https://www.jeffgeerling.com/blog/2018/use-ansibles-yaml-callback-plugin-better-cli-experience

有这样的东西啊。大家都知道吗?
不用再改了,用默认的就好了。

仅需要一个选项来以母语中文进行以下段落的释义:

请参考第2项。

在执行ansible-playbook -v命令时,根据yaml配置,似乎无法将多行日语作为任务的stdout显示出来。

 

要避免这种情况,可以使用稍微不同的格式,即可使用 stdout_callback = debug。

虽然我没有使用-v等选项,但是通过Shell模块的标准输出,能够正确地显示包括换行等内容,而且还可以做到没有使用debug任务,真是太棒了。

追加评论

个人认为以下几点可能不错。

[defaults]
verbosity = 1
stdout_callback = debug
callback_whitelist = profile_tasks

回调白名单(callback_whitelist)= profile_tasks会在任务执行期间显示执行时间和累计时间。

广告
将在 10 秒后关闭
bannerAds