【モジュールの使い方】command
機能
commandモジュールを使用することで、hostsで指定したサーバで以下のような操作を実施できる
■commandモジュールの特徴 + shellを通さない + 環境変数を読めない + &,パイプ,リダイレクトの利用が不可 + Shellを通さないのでユーザ環境の影響を受けにくい
■コマンド実行とべき等性に関する留意点
+ 実行するコマンドによってはべき等性が保証できない
+ Ansibleシステムでは、あるべき「状態」を設計するというのが基本的
コマンド実行については実行後の状態が明確に決まらない場合がある。
冪等性(べきとうせい、idempotency, idempotence)とは
同じ操作を何度繰り返しても、同じ結果が得られるという性質です。 べき等性がある操作(idempotent operation)は、1回操作した場合の結果と、2回以上操作した場合の結果は同じになります。
使用例
commandによるテキストファイルのコピーを実行
- /root/txt_dir/test.txtを/root/txt_dir/test2.txtとしてコピーする
- hosts: all become: yes tasks: - name: command test command : cmd: 'cp -p test.txt test2.txt' chdir: /root/txt_dir/
注意点
commandモジュールでcpコマンドを実行する場合
以下の条件に該当する
+ モジュールのcreateオプションを使用しない場合
+ createオプションを使用し、かつcreateオプションで指定したパスが存在しない場合
この場合は、cpのコピー先ファイルが存在している場合でも
強制的に上書きされる
ため注意してください。
上書きをさせたくない場合
commandモジュールのcreateオプションにコピー先のパスを指定してください。
主なパラメータ
パラメータ | 必須 | デフォルト値 | 選択肢 | 説明 |
---|---|---|---|---|
cmd | 実行するコマンド | |||
creates | ファイルパスまたはglobパターンを指定 指定したファイルが存在する場合はコマンドを実行しない |
|||
chdir | コマンド実行前にカレントディレクトリを変更したい場合はパスを指定 |
全パラメータ
パラメータ | 必須 | デフォルト値 | 選択肢 | 説明 |
---|---|---|---|---|
argv | コマンドを文字列ではなくリストとして渡す | |||
chdir | コマンド実行前にカレントディレクトリを変更したい場合はパスを指定 | |||
cmd | 実行するコマンド | |||
creates | ファイルパスまたはglobパターンを指定 指定したファイルが存在する場合はコマンドを実行しない |
|||
free_form | 実行するコマンドの指定free_formというオプション名はつけず | |||
removes | ファイル名が存在しない場合コマンドを実行しない | |||
stdin | コマンドのstdinを指定された値に直接設定 | |||
stdin_add_newline | yes/no | yes | stdinデータに改行を追加するのか設定 | |
strip_empty_ends | yes/no | yes | 結果のstdout/stderrの末尾から空行を削除します | |
warm | yes/no | no | タスク警告を有効or無効設定 この機能は非推奨で、2.14で削除される予定です。 |
戻り値
Key | Returned | 説明 |
---|---|---|
cmd | always | タスクが実行したコマンド Sample: ['echo', 'hello'] |
delta | always | コマンド実行デルタ時間 Sample: 0:00:00.001529 |
end | always | コマンドの実行終了時刻 Sample: 2017-09-29 22:03:48.084657 |
msg | always | changed Sample: True |
rc | always | コマンドのリターンコード(0は成功を意味する) |
strat | always | コマンドの実行開始時刻 Sample: 2017-09-29 22:03:48.083128 |
stderr | always | コマンドのエラー内容 Sample: ls: cannot access foo: No such file or directory |
stderr_lines | always | コマンドのエラー内容を行単位で分割して返却 Sample: [{"u'ls cannot access foo": "No such file or directory'"}, "u'ls …'"] |
stdout | always | コマンドの実行結果を出力 Sample: Clustering node rabbit@slave1 with rabbit@master … |
stdout_lines | always | コマンドの実行結果を行単位で分割して返却 Sample: ["u'Clustering node rabbit@slave1 with rabbit@master …'"] |
ドキュメント
【Ansible Documentation】Command Template