Ansible Fetch モジュール

AnsibleAnsibleBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Ansible Fetch モジュールの実験(Lab)へようこそ!この実験では、Ansible Fetch モジュールの使い方について学びます。Fetch モジュールを使用すると、リモートマシンからファイルを取得し、Ansible が実行されているコントロールマシンにコピーすることができます。これは、管理対象のホストから特定のファイルや成果物を収集する必要がある場合に便利です。

始めましょう!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) ansible/ModuleOperationsGroup -.-> ansible/fetch("Retrieve Files") ansible/ModuleOperationsGroup -.-> ansible/file("Manage Files/Directories") ansible/ModuleOperationsGroup -.-> ansible/template("Generate Files from Templates") ansible/PlaybookEssentialsGroup -.-> ansible/loop("Iteration") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") subgraph Lab Skills ansible/fetch -.-> lab-290159{{"Ansible Fetch モジュール"}} ansible/file -.-> lab-290159{{"Ansible Fetch モジュール"}} ansible/template -.-> lab-290159{{"Ansible Fetch モジュール"}} ansible/loop -.-> lab-290159{{"Ansible Fetch モジュール"}} ansible/playbook -.-> lab-290159{{"Ansible Fetch モジュール"}} end

単一ファイルの取得

このステップでは、Ansible Fetch モジュールを使用してリモートマシンから単一のファイルを取得する方法を学びます。これにより、モジュールの基本的な使い方と構文を理解することができます。

まず、/home/labex/project/fetching_a_single_file.yml ファイルを完成させます。
テキストエディタでこのファイルを開き、以下の内容を playbook ファイルに追加します。

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Fetch a single file
      fetch:
        src: /home/labex/example/example_1.txt
        dest: /home/labex/project/example_1.txt
        flat: true
  • fetch: これは、リモートホストからファイルを取得するために使用される Ansible モジュールです。
  • src: これは、取得する必要があるリモートホスト上のファイルのパスを指定します。この例では、/home/labex/example/example_1.txt です。
  • dest: これは、取得したファイルをローカルホスト上に保存する場所のパスを指定します。この例では、/home/labex/project/example_1.txt です。
  • flat: このパラメータは、宛先パスの動作を制御します。true に設定すると、取得したファイルがサブディレクトリを作成せずに宛先ディレクトリに配置されることが保証されます。これは、単一のファイルを取得し、ディレクトリ構造をシンプルに保ちたい場合に便利です。

Ansible の fetch モジュールは、リモートホストからローカルホストにファイルを取得するために使用されます。この設定では、リモートホストの /home/labex/example/ ディレクトリから "example_1.txt" という名前のファイルを取得し、ローカルホストの /home/labex/project/ ディレクトリに "example_1.txt" として保存します。flat: true パラメータにより、取得したファイルがサブディレクトリなしで直接宛先ディレクトリに配置されます。

次に、以下のコマンドで playbook を実行します。

ansible-playbook fetching_a_single_file.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 [Fetch Module Lab] **************************************************

TASK [Fetch a single file] *****************************************************
changed: [localhost]

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

最後に、example_1.txt ファイルがリモートホストからローカルに取得されたことを確認します。

ll /home/labex/project/example_1.txt

出力例:

-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 /home/labex/project/example_1.txt

複数ファイルの取得

このステップでは、リモートマシンから複数のファイルを取得することで、Fetch モジュールについての理解を深めます。これにより、単一のタスクで複数のファイルを収集することができます。

まず、/home/labex/project/fetching_multiple_files.yml ファイルを完成させます。
テキストエディタでこのファイルを開き、以下の内容を playbook ファイルに追加します。

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Fetch multiple files
      loop:
        - example_2.txt
        - example_3.txt
      fetch:
        src: "/home/labex/example/{{ item }}"
        dest: "/home/labex/project/{{ item }}"
        flat: true
  • loop: このキーワードは、アイテムのリストを反復処理するために使用されます。
  • fetch: これは、リモートホストからファイルを取得するために使用される Ansible モジュールです。
  • src: これは、取得するファイルのソースパスを指定します。{{ item }} プレースホルダは、ループ内の各アイテムに置き換えられ、結果として /home/labex/example/ ディレクトリから example_2.txtexample_3.txt が取得されます。
  • dest: これは、取得したファイルを保存する宛先パスを指定します。再び、{{ item }} プレースホルダが使用され、各ファイルが /home/labex/project/ 内の対応するディレクトリに配置されることが保証されます。
  • flat: このパラメータは、宛先パスの動作を制御します。true に設定すると、取得したファイルがサブディレクトリを作成せずに宛先ディレクトリに配置されることが保証されます。これは、単一のファイルを取得し、ディレクトリ構造をシンプルに保ちたい場合に便利です。

この設定では、ローカルホストの /home/labex/example/ ディレクトリから複数のファイル(example_2.txtexample_3.txt)を取得し、/home/labex/project/ 内の対応するディレクトリに保存します。loop 構造により、アイテムのリストを反復処理し、リスト内の各アイテムに対して取得操作を実行することができます。

次に、以下のコマンドで playbook を実行します。

ansible-playbook fetching_multiple_files.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 [Fetch Module Lab] **************************************************

TASK [Fetch multiple files] ****************************************************
changed: [localhost] => (item=example_2.txt)
changed: [localhost] => (item=example_3.txt)

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

最後に、example_2.txtexample_3.txt がリモートホストからローカルに取得されたことを確認します。

ll /home/labex/project/ | grep example

出力例:

-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 example_1.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_2.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_3.txt

Fetch モジュールでの変数の使用

このステップでは、変数を組み込むことにより、Ansible Fetch モジュールのより高度な使い方を学びます。Playbook で定義された動的な値に基づいてファイルを取得します。

まず、/home/labex/project/using_variablesin_fetch_modules.yml ファイルを完成させます。
テキストエディタでこのファイルを開き、以下の内容を playbook ファイルに追加します。

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false
  vars:
    file_path: "/home/labex/example/example_4.txt"
    dest_path: "/home/labex/project/example_4.txt"

  tasks:
    - name: Fetch files using variables
      fetch:
        src: "{{ file_path }}"
        dest: "{{ dest_path }}"
        flat: true
  • vars: このセクションでは、playbook 内で使用する変数を定義できます。
  • fetch: これは、リモートホストからファイルを取得するために使用される Ansible モジュールです。
  • src: これは、取得するファイルのソースパスを指定します。file_path 変数を使用して、ソースファイルのパスを動的に指定します。
  • dest: これは、取得したファイルを保存する宛先パスを指定します。dest_path 変数を使用して、宛先ファイルのパスを動的に指定します。
  • flat: このパラメータは、宛先パスの動作を制御します。true に設定すると、取得したファイルがサブディレクトリを作成せずに宛先ディレクトリに配置されることが保証されます。これは、単一のファイルを取得し、ディレクトリ構造をシンプルに保ちたい場合に便利です。

この設定では、リモートホスト上のソースファイルパス(file_path 変数)からファイルを取得し、ローカルの Ansible コントロールノード上の宛先ファイルパス(dest_path 変数)に保存します。変数を使用することで、ファイルパスを動的に指定でき、playbook の柔軟性と再利用性が向上します。

次に、以下のコマンドで playbook を実行します。

ansible-playbook using_variablesin_fetch_modules.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 [Fetch Module Lab] **************************************************

TASK [Fetch files using variables] *********************************************
changed: [localhost]

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

次に、example_4.txt ファイルがリモートホストからローカルに取得されたことを確認します。

ll /home/labex/project/example_4.txt

出力例:

-rw-rw-r-- 1 labex labex 23 Mar 14 11:16 /home/labex/project/example_4.txt

最後に、-e オプションで file_pathdest_path を指定してみましょう。

ansible-playbook using_variablesin_fetch_modules.yml -e file_path="/tmp/example_5.txt" -e dest_path="/tmp/target/example_5.txt"

出力例:

[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 [Fetch Module Lab] **************************************************

TASK [Fetch files using variables] *********************************************
changed: [localhost]

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

example_5.txt ファイルがリモートホストからローカルに取得されたことを確認します。

ll /tmp/target/example_5.txt

出力例:

-rw-rw-r-- 1 labex labex 23 Mar 14 11:24 /tmp/target/example_5.txt

まとめ

Ansible Fetch モジュールの実験(Lab)を完了したことをお祝いします!この実験では、Ansible Fetch モジュールを使用してリモートマシンからファイルを取得し、コントロールマシンにコピーする方法を学びました。単一のファイルの取得から始めて、複数のファイルの取得や、動的なファイル取得のための変数の組み込みまで学びました。

この実験を完了することで、管理対象のホストから特定のファイルや成果物を収集するために Fetch モジュールを活用する貴重な経験を積むことができました。Ansible とそのモジュールをさらに探求し、自動化能力を向上させましょう。

楽しい自動化ライフを!