Ansibleのshellモジュール、commandモジュール

2 min read読了の目安(約2200字

はじめに

くーばねてすを倒すために今回はNode.jsをやっつけないといけなくなったのでNode.jsの設定をデーモン化したものをAnsibleで自動化するために色々調べた(^^)/!自動化するにはAnsibleのモジュールを倒さなければならないことが分かったのでモジュールを勉強する!

概要

■shellモジュール
■commandモジュール

をまとめた(^^)/!

■shellモジュール

shellモジュール公式ドキュメント
Windowsの時はwin_shellモジュールを利用する。
shellモジュールは、指定したコマンドをシェル(/bin/sh)を介して実行する。
似たようなモジュールにcommandモジュールがあり、shellモジュールはユーザ環境変数や、パイプ・リダイレクトを使った処理を行いたい場合に利用する。

sellモジュールではこれが使えるぞ!
$HOME, "<", ">", "|", "&"
パラメータ 意味
chdir コマンドを実行する前にcdコマンドでディレクトリを移動する。
cmd コマンドからスペース、改行を維持したまま実行したい場合に使用する
free_form ※必須項目。実行するコマンドの指定。free_formというオプション名はつけず、コマンドを書き始めれば良い。
creates ファイル名がすでに存在する場合、シェルは実行されない。
executable コマンドの実行に使用するシェルを変更する。実行可能ファイルへの絶対パスを指定する
removes ファイル名が存在しない場合、指定した処理内容は実行されない。

複数行のシェルスクリプトを記述したいときは、|という、リテラルブロック演算子を使用して書くとスッキリする。引数としてargsオプションを使用してさらにスッキリ!

- name: テキストを表示する
  shell: |
    echo hoge >> somelog.txt
    echo foo
    echo baa
  args:
    chdir: somedir/

コマンドからスペース、改行を維持したまま実行したい場合はcmdオプションを使用する。

  tasks:
    - name: shell module + cmd args
      shell:
        cmd: |
          cat <<EOF
          aaa
            bbb
          ccc
          EOF
      register: result_shell

■commandモジュール

commandモジュールはシェルを介して実行されないため、 環境変数やパイプやリダイレクトは使えない。
ユーザ環境に依存しないので安全にコマンドを実行することができる。
commandモジュール公式ドキュメント

パラメータ 意味
chdir コマンドを実行する前に、指定したディレクトリに移動
executable コマンドを実行するシェルを変更。絶対パスであること。
creates ファイルがすでに存在する場合、処理内容は実行されない
removes ファイル名が存在しない場合、指定した処理内容は実行されない。
freeform 実行したい自由形式のコマンドを記述する。実際にはfreeformという名前のパラメータはない。
warn 警告を有効または無効にする。ansible.cfgのcommand_warningsの設定を確認する。argsオプションで指定しないと反映されないらしい
commandモジュール記述例
  tasks:
    - name: Command test
      command:
        cmd: 'cp -p test.txt test2.txt'
        chdir: /root/dir

まとめ

まとまらないので続く!

参考

https://qiita.com/dkuji/items/7bbbea2ad65614c57705
https://qiita.com/Hiraku/items/e8b55775fa55b0e72a44
https://qiita.com/waterada/items/4e64cc6f810a92001c95
https://www.javaer101.com/en/article/7194160.html