Ansibleのshellモジュール、commandモジュール
はじめに
くーばねてすを倒すために今回はNode.jsをやっつけないといけなくなったのでNode.jsの設定をデーモン化したものをAnsibleで自動化するために色々調べた(^^)/!自動化するにはAnsibleのモジュールを倒さなければならないことが分かったのでモジュールを勉強する!
概要
■shellモジュール
■commandモジュール
をまとめた(^^)/!
■shellモジュール
shellモジュール公式ドキュメント
Windowsの時はwin_shellモジュールを利用する。
shellモジュールは、指定したコマンドをシェル(/bin/sh)を介して実行する。
似たようなモジュールにcommandモジュールがあり、shellモジュールはユーザ環境変数や、パイプ・リダイレクトを使った処理を行いたい場合に利用する。
$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オプションで指定しないと反映されないらしい|
tasks:
- name: Command test
command:
cmd: 'cp -p test.txt test2.txt'
chdir: /root/dir
まとめ
まとまらないので続く!
参考
Discussion