Ansible Local Action モジュール

AnsibleBeginner
オンラインで実践に進む

はじめに

Ansible Local Action Module Lab へようこそ!この実験では、Ansible Local Action モジュールの使い方を学びます。Local Action モジュールを使うと、Ansible が実行されているコントロールマシンでタスクを実行できます。これは、ローカルで操作を行う必要がある場合、たとえばシェルコマンドを実行したり、スクリプトを実行したりするときに便利です。

始めましょう!

ローカルで単純なコマンドを実行する

このステップでは、Ansible Local Action モジュールを使ってコントロールマシンで簡単なコマンドを実行する方法を学びます。これにより、モジュールの基本的な使い方と構文を理解できます。

まず、/home/labex/project/execute_local_command.ymlファイルを完成させます。
プレイブックファイルに以下の内容を追加します。

- name: Executing a Simple Command Locally
  gather_facts: false
  hosts: localhost

  tasks:
    - name: Print a message locally
      local_action:
        module: command
        cmd: echo "Hello, World!"
      register: result

    - name: Debug the output
      debug:
        var: result.stdout
  • gather_facts:これは、Ansible が対象ホストに関する情報を収集するかどうかを指定します。この場合、falseに設定されており、情報の収集は行われません。
  • hosts:これは、プレイブックを実行する対象ホストを指定します。この場合、対象ホストがlocalhostなので、プレイブックはローカルホストで実行されます。
  • tasks:これは実行するタスクのリストです。
  • local_action:これは、Ansible が実行されているコントロールマシン上でローカルにアクションを実行することを示します。
  • module:これは、アクションに使用する Ansible モジュールを指定します。この場合、commandモジュールです。
  • cmd:これは実際に実行するコマンドです。この場合、シェルコマンドecho "Hello, World!"で、コンソールに「Hello, World!」というメッセージが表示されます。
  • register:これは、コマンドの出力をresult変数に登録して、後でプレイブックで使用できるようにします。
  • debug:これは、デバッグ情報を表示するために使用する Ansible モジュールです。
  • var:これは、debugモジュールのパラメータで、デバッグ対象の変数を指定します。この場合、前のタスクで実行されたコマンドの標準出力を含むresult.stdoutです。

要するに、このプレイブックはコントロールマシン上で簡単なコマンドecho "Hello, World!"をローカルに実行し、出力を登録し、その後debugモジュールを使って出力を表示します。

次に、Ansible プレイブックでコマンドの出力を表示します。

ansible-playbook /home/labex/project/execute_local_command.yml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Local Action Module Challenge] *******************************************

TASK [Print a message locally] *************************************************
changed: [localhost]

TASK [Debug the output] ********************************************************
ok: [localhost] => {
    "result.stdout": "Hello, World!"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ここで"result.stdout": "Hello, World!"は、echo "Hello, World!"コマンドの出力です。

変数置換を伴うコマンドの実行

このステップでは、変数置換を組み込むことで Local Action モジュールの理解を深めます。これにより、プレイブックで定義された変数に基づいて実行するコマンドを動的に変更できるようになります。

まず、/home/labex/project/execute_command_with_variable_substitution.ymlファイルを完成させます。
プレイブックファイルに以下の内容を追加します。

- name: Executing a Command with Variable Substitution
  gather_facts: false
  hosts: localhost
  vars:
    message: "Hello, Ansible!"

  tasks:
    - name: Print a message with variable substitution
      local_action:
        module: command
        cmd: echo "{{ message }}"
      register: result

    - name: Debug the output
      debug:
        var: result.stdout
  • vars:このセクションは変数を定義するために使用されます。このプレイブックでは、値が"Hello, Ansible!"messageという名前の変数を定義しています。
  • local_action:これは、Ansible が実行されているコントロールマシン上でローカルにアクションを実行することを示します。
  • module:これは、アクションに使用する Ansible モジュールを指定します。この場合、commandモジュールです。
  • cmd:これは実際に実行するコマンドです。この場合、シェルコマンドecho "{{ message }}"で、{{ message }}は先に定義されたmessage変数の値に置き換えられます。
  • register:これは、コマンドの出力をresult変数に登録して、後でプレイブックで使用できるようにします。
  • debug:これは、デバッグ情報を表示するために使用する Ansible モジュールです。
  • var:これは、debugモジュールのパラメータで、デバッグ対象の変数を指定します。この場合、前のタスクで実行されたコマンドの標準出力を含むresult.stdoutです。

要するに、このプレイブックはコントロールマシン上でecho "{{ message }}"コマンドをローカルに実行し、{{ message }}varsセクションで定義されたmessage変数の値に置き換えます。コマンドの出力を登録し、その後debugモジュールを使って出力を表示します。

次に、Ansible プレイブックでコマンドの出力を表示します。

ansible-playbook /home/labex/project/execute_command_with_variable_substitution.yml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Local Action Module Challenge] *******************************************

TASK [Print a message with variable substitution] ******************************
changed: [localhost]

TASK [Debug the output] ********************************************************
ok: [localhost] => {
    "result.stdout": "Hello, Ansible!"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ここで"result.stdout": "Hello, Ansible!"は、echo "{{ message }}"コマンドの出力です。

複雑なローカルアクションの実行

このステップでは、Ansible Local Action モジュールのより複雑な使い方を探ります。ローカルでシェルスクリプトを実行し、そのスクリプトに引数を渡します。

まず、/home/labex/project/execute_complex_local_action.ymlファイルを完成させます。
プレイブックファイルに以下の内容を追加します。

- name: Executing a Complex Local Action
  gather_facts: false
  hosts: localhost

  tasks:
    - name: Execute a shell script with arguments
      local_action:
        module: shell
        cmd:./script.sh 5 7
      register: result

    - name: Debug the output
      debug:
        var: result.stdout
  • local_action:これは、Ansible が実行されているコントロールマシン上でローカルにアクションを実行することを示します。
  • module:これは、アクションに使用する Ansible モジュールを指定します。この場合、shellモジュールです。
  • cmd:これは実際に実行するシェルコマンドです。この場合、./script.sh 5 7で、引数57を持つscript.shという名前のシェルスクリプトを実行します。
  • register:これは、コマンドの出力をresult変数に登録して、後でプレイブックで使用できるようにします。
  • debug:これは、デバッグ情報を表示するために使用する Ansible モジュールです。
  • var:これは、debugモジュールのパラメータで、デバッグ対象の変数を指定します。この場合、前のタスクで実行されたコマンドの標準出力を含むresult.stdoutです。

要するに、このプレイブックはコントロールマシン上で引数57を持つscript.shというシェルスクリプトをローカルに実行します。スクリプトの出力を登録し、その後debugモジュールを使って出力を表示します。

ヒント:このシェルスクリプトは既に用意してあります。/home/labex/project/ディレクトリにあり、script.shと呼ばれています。このスクリプトの機能は、2 つのパラメータの合計を計算することです。

次に、Ansible プレイブックでコマンドの出力を表示します。

ansible-playbook /home/labex/project/execute_complex_local_action.yml

実行結果の例:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Local Action Module Challenge] *******************************************

TASK [Execute a shell script with arguments] ***********************************
changed: [localhost]

TASK [Debug the output] ********************************************************
ok: [localhost] => {
    "result.stdout": "The sum of 5 and 7 is 12."
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ここで"result.stdout": "The sum of 5 and 7 is 12."は、./script.sh 5 7スクリプトの出力です。

まとめ

Ansible Local Action Module Lab を完了しました!おめでとうございます!この実験では、Ansible Local Action モジュールを使ってローカルでコマンドとスクリプトを実行する方法を学びました。簡単なコマンド実行から始めて、変数置換を組み込み、引数付きの複雑なシェルスクリプトを実行するまで進歩しました。

この実験を完了することで、コントロールマシンで実行する必要のあるタスクに対して Local Action モジュールを活用する貴重な経験を得ました。Ansible とそのモジュールをさらに探求して、自動化能力をさらに向上させましょう。

楽しい自動化を!