Ansibleでリモートサーバのコマンドやシェルスクリプトを実行
リモートのサーバ上にあるhoge.shを実行してみる。
# cat hoge.sh #!/bin/sh echo "hogeeee" exit 0 [root@localhost script]#
これをAnsibleホストから実行するには、以下のようなPlaybookを書く。
$ cat command.yml - name: execute shell script hosts: all tasks: - name: execute hoge.sh command: "/root/script/hoge.sh"
以下のコマンドで実行。
ansible-playbook -i hosts command.yml
結果はこんな感じになる。
$ ansible-playbook -i hosts command.yml PLAY [execute shell script] ****************************************************************** TASK [Gathering Facts] *********************************************************************** ok: [vm-machine] TASK [execute hoge.sh] *********************************************************************** changed: [vm-machine] PLAY RECAP *********************************************************************************** vm-machine : ok=2 changed=1 unreachable=0 failed=0
では、exit 1
で終了した場合はどうなるのか?
実行するスクリプトをexit 1
で終了するように変更。
cat hoge.sh #!/bin/sh echo "hogeeee" exit 1 [root@localhost script]#
すると…
$ ansible-playbook -i hosts command.yml PLAY [execute shell script] ****************************************************************** TASK [Gathering Facts] *********************************************************************** ok: [vm-machine] TASK [execute hoge.sh] *********************************************************************** fatal: [vm-machine]: FAILED! => {"changed": true, "cmd": ["/root/script/hoge.sh"], "delta": "0:00:00.003313", "end": "2017-07-15 22:40:10.164897", "failed": true, "rc": 1, "start": "2017-07-15 22:40:10.161584", "stderr": "", "stderr_lines": [], "stdout": "hogeeee", "stdout_lines": ["hogeeee"]} to retry, use: --limit @/home/sysmgr/ansible/command.retry PLAY RECAP *********************************************************************************** vm-machine : ok=1 changed=0 unreachable=0 failed=1
ちゃんとエラーで終了した旨を通知してくれる。