Ansible:commandモジュールについて(Ansible 2.9.6)

インフラサーバ

Ansible でのコマンド実行について

Ansible においてコマンドを実行するためのモジュールとしては、主に command モジュールと shell モジュールがあります。

■ command モジュールの特徴

  • シェルを通さない
  • 環境変数を読めない
  • &、パイプ、リダイレクトが使えない
  • シェルを通さないのでユーザ環境の影響を受けにくい

■ shell モジュールの特徴

  • シェルを通す
  • 環境変数を読める
  • &、パイプ、リダイレクトが使える

■ コマンド実行とべき等性に関する留意点

  • 実行するコマンドによってはべき等性が保証できない
  • Ansible ではシステムのあるべき「状態」を設計するというのが基本的な考え方だが、コマンド実行については実行後の状態が明確に決まらない場合がある

以下では command モジュールについて説明しますが、shell モジュールも大体使い方は同じです。

主なパラメータ

パラメータ必須選択肢/デフォルト説明
cmd実行するコマンド
createsファイルパスまたはglobパターンを指定
指定したファイルが存在する場合はコマンドを実行しない
chdirコマンド実行前にカレントディレクトリを
変更したい場合はパスを指定

使用例

作業環境

  • CentOS 8.0
  • Python 3.7.7
  • Ansible 2.9.6

使用例

  • /root/dir/test.txt を /root/dir/test2.txt としてコピーする

■ Ansible 実行前の /root/dir

# ls -l dir
total 0
-rw-r--r-- 1 root root 0 Apr 20 07:39 test.txt

■ playbook.yml

- hosts: all
  become: yes
  tasks:
    - name: Command test
      command:
        cmd: 'cp -p test.txt test2.txt'
        chdir: /root/dir

■ Ansible 実行後の /root/dir

# ls -l dir
total 0
-rw-r--r-- 1 root root 0 Apr 20 07:39 test.txt
-rw-r--r-- 1 root root 0 Apr 20 07:39 test2.txt

注意点

command モジュールで cp コマンドを実行する場合について、以下の条件に該当するとします。

  • モジュールの create オプションを使用しない場合、または
  • create オプションを使用していて、かつ create オプションで指定したパスが存在しない場合

この場合は、cp のコピー先ファイルが存在している場合でも強制的に上書きがされるため注意してください。上書きをさせたくない場合は、command モジュールの create オプションにコピー先のパスを指定してください。

―――――――――――――

タイトルとURLをコピーしました