Ansible: shellモジュールで実行された複数行にわたるコマンドを改行された状態で表示


要望

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時にも行で分離して表示できると嬉しいが。