Ansibleでシェルを実行させる時の注意点
概要
Ansibleで以下のようにshellモジュール(shell:)で、シェルを実行させようとした時、(シェルは正常終了しているが)シェル内のaws cliコマンドが実行されていない!とハマったのでメモ。
shell: /home/hoge/scripts/test.sh {{ hoge_name }} && sleep 2s
原因
・Ansibleで対象サーバ内のシェルを実行させる際にデフォルトで使われるのはbashではなかった
shellモジュール実行時のシェルは「/bin/sh」であり、ログインシェルは実行していない(.bash_profile等を読み込まない)
・aws cliコマンドを実行する際にパスが通っていないことが原因だった
対処法
・環境変数を設定し、aws cliのパスを通してあげる。 以下のように「environment」を指定してあげるとこの処理の時だけ指定したパスで実行してくれるので便利
- name: LB_OUT; /home/hoge/scripts/test.sh shell: /home/hoge/scripts/test.sh {{ hoge_name }} && sleep 2s environment: PATH: /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
当たり前のように/bin/bashで実行されるものだと思い込んでいたので、こういう罠にハマりました。 今後も忘れないようにしなければ。