気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Ansible commandとshellモジュールの違い

モジュール概要

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を使った置換の方が良さそうですね。

このあたりの理解は、また使う機会があったらもう少しちゃんと理解しようと思います。