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
参考来源:
community.general collection に yaml callback plugin があった!これインストールした増えたhttps://t.co/08kUpIKsUZ pic.twitter.com/e0nhFdFHQS
— よこち (@akira6592) June 3, 2020
请参考以下链接:
community.general collection に yaml callback plugin があった!これインストールした増えたhttps://t.co/08kUpIKsUZ pic.twitter.com/e0nhFdFHQS
— よこち (@akira6592) June 3, 2020
战术剧本示例
- 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会在任务执行期间显示执行时间和累计时间。