🤑

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

2021/04/07に公開

はじめに

くーばねてすを倒すために今回は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

Discussion