ゆるい感じのプログラムを書きたい。

プログラムの敷居を下げて、多くの人が開発出来るように色々書いていきます!

【モジュールの使い方】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

参考サイト

matsublog Ansible:commandモジュールについて

【RunaBook.dev】Module command