Ansibleのshellモジュールでヒアドキュメントが使いたいときー
が、あると思います。
shellモジュールでヒアドキュメントを使うと・・・
コチラのissueにコメントがありましたが、
- shell: | cat <<EOT a b EOT
の結果は
a b
(半角スペースがaとbの前に入る)
という。。
大半のケースでは大丈夫でしょうが、困る場合もあります。
対策
Ansibleのコアディベロッパーが推奨しているらしい方法
scriptモジュールを使う。
http://docs.ansible.com/ansible/script_module.html
ローカルにあるファイルをリモートに転送して実行してくれます。
例えば、
roles/common/file/script.sh roles/common/task/main.yml
な構成をとっていた場合、roles/common/task/main.yml
では
- script: script.sh
みたいに使えます。
これならAnsible特有の問題で嵌ることもないでしょう。
ワークアラウンド
発想の転換に感心してしまったのですが、sedを使って空白を取り除きますw
- shell: | sed 's/^ //' <<EOT | cat a b EOT
これで普通にヒアドキュメントをcatしたのと同じになると。
まとめ
ま、ほんとうは冪等性確保のために、shellモジュールもscriptモジュールも使うなということなのでしょうが・・・
どなたかの参考になれば幸いです。