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で実行されるものだと思い込んでいたので、こういう罠にハマりました。 今後も忘れないようにしなければ。