Ansible提示:显示shell模块的中间过程日志与ansible-playbook的日志实时合并的例子

https://qiita.com/hiroyuki_onodera/items/2fa11aeb3598284dbe54的后续内容

虽然不是太美好的做法,但仍然能行,为了备忘起见,我还是留下来。

希望: 我希望能够在同一屏幕上显示ansible-playbook的日志以及shell模块的stdout和stderr。

在一个将tail -f命令以后台方式执行的终端中执行ansible-playbook命令。

任务的示例

  - name: terraform apply --auto-approve
    shell:
      executable: /bin/bash
      cmd: |
        exec &> >(tee -a "/tmp/ansible_shell.log") 
        set -x
        cd terraform
        terraform apply --auto-approve

示例执行(目标为本地节点)

    • tail -fをバックグラウンドで実行し、ログファイルを実行ターミナルにもリアルタイムに出力させておく

 

    その後、ansible-playbookを行うと、ansible-playbookのログとshellモジュールのstdout, stderrが同じ実行ターミナルに表示される事になる
$ touch /tmp/ansible_shell.log

$ tail -f /tmp/ansible_shell.log &
[1] 87649

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

TASK [terraform apply --auto-approve] ******************************************
+ cd terraform
+ terraform apply --auto-approve
Acquiring state lock. This may take a few moments...
ibm_pi_volume.ds_volume_share2: Refreshing state... [id=976c66a7-d403-4432-8ddb-f876cce6db0d/b7308887-0380-4f2d-a4e2-5ab8d6bada6a]
data.ibm_pi_network.power_networks_private: Reading...
...

Apply complete! Resources: 18 added, 0 changed, 0 destroyed.

changed: [localhost]

...

停止BackgroundTail需要

% jobs
[1]  + running    tail -f /tmp/ansible_shell.log
$ kill %1
[1]  + terminated  tail -f /tmp/ansible_shell.log  
$       

嗯,通常我认为会用另一个终端查看。。

对于远程节点而言

    sshでtail -fを行なっておく
$ ssh remote_node "touch /tmp/ansible_shell.log; tail -f /tmp/ansible_shell.log" & 
[1] 89800
[1]  + suspended (tty input)  ssh remote_node "touch /tmp/ansible_shell.log; tail -f /tmp/ansible_shell.log"
$ ansible-playbook -i remote_node, site.yml 
...
广告
将在 10 秒后关闭
bannerAds