要望
shellモジュールで実行された複数行にわたるコマンドを、後続のdebugモジュールにて、改行された状態で確認したい
##ソリューション
フィルターでは適当なものが見つからなかったが、pythonのsplitlines()にて可能
playbook 例
playbook.yml
---
- hosts: all
gather_facts: false
tasks:
- shell: |
echo a
echo b
echo c
register: r
- debug: { var: r.cmd } # <= そのまま出力すると読みにくい
- debug: { var: r.cmd.splitlines() } # <= splitlines()にて分離
- debug: { var: r.stdout_lines }
- debug: { var: r.stderr_lines }
実行例
$ ansible-playbook -i localhost, -c local playbook.yml
PLAY [all] *******************************************************************************************************
TASK [shell] *****************************************************************************************************
changed: [localhost]
TASK [debug] *****************************************************************************************************
ok: [localhost] => {
"r.cmd": "echo a\n echo b\necho c\n" # <= そのまま出力した例
}
TASK [debug] *****************************************************************************************************
ok: [localhost] => {
"r.cmd.splitlines()": [
"echo a", # <= 行で分離して出力した例
" echo b", # <= 行で分離して出力した例
"echo c" # <= 行で分離して出力した例
]
}
TASK [debug] *****************************************************************************************************
ok: [localhost] => {
"r.stdout_lines": [
"a",
"b",
"c"
]
}
TASK [debug] *****************************************************************************************************
ok: [localhost] => {
"r.stderr_lines": []
}
PLAY RECAP *******************************************************************************************************
localhost : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
なお、(shellモジュールではなく、)commandモジュールでは、レジストリー変数に文字列として渡されないので使用できない。
fail時にも行で分離して表示できると嬉しいが。