モジュール概要
commandとshellモジュールの違いを簡単に記載します。
- command
- シェルを介さない
- 環境変数($HOMEなど)や、 “<”, “>”, “|”, “;” などのパイプやリダイレクトは使えません。
- ユーザ環境に依存せずにセキュアにコマンドを実行
- shell
- ユーザ環境変数や、パイプ・リダイレクトを使った処理を行いたい場合
モジュールを使った実装例
itemに挿入されている文字列のreplace_word1とreplace_word2を特定文字列に置換する処理を例に挙げてみます。
commnand
command: "{{ item }}" with_items: - sed -i 's/{{ replace_word1 }}/{{ result_word1 }}/g' "{{ directory }}/{{ base_file }}" - sed -i 's/{{ replace_word2 }}/{{ result_word2 }}/g' "{{ directory }}/{{ base_file }}"
shell
ちょっといい書き方が思いつかず。。記載やめときます。
他のブログに書いてたこと
playbookを書く際には他のモジュールを調べた上で、どうしても他のモジュールでは記述できないときにだけ、このshell commandモジュールを使えばよいかと思います。
ansible commandとshellモジュールの違い - kakts-log
replaceとかlineinfileを使った置換の方が良さそうですね。
このあたりの理解は、また使う機会があったらもう少しちゃんと理解しようと思います。