はじめに
Ansible Fetch モジュールの実験(Lab)へようこそ!この実験では、Ansible Fetch モジュールの使い方について学びます。Fetch モジュールを使用すると、リモートマシンからファイルを取得し、Ansible が実行されているコントロールマシンにコピーすることができます。これは、管理対象のホストから特定のファイルや成果物を収集する必要がある場合に便利です。
始めましょう!
Ansible Fetch モジュールの実験(Lab)へようこそ!この実験では、Ansible Fetch モジュールの使い方について学びます。Fetch モジュールを使用すると、リモートマシンからファイルを取得し、Ansible が実行されているコントロールマシンにコピーすることができます。これは、管理対象のホストから特定のファイルや成果物を収集する必要がある場合に便利です。
始めましょう!
このステップでは、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.txt
と example_3.txt
が取得されます。dest
: これは、取得したファイルを保存する宛先パスを指定します。再び、{{ item }}
プレースホルダが使用され、各ファイルが /home/labex/project/
内の対応するディレクトリに配置されることが保証されます。flat
: このパラメータは、宛先パスの動作を制御します。true
に設定すると、取得したファイルがサブディレクトリを作成せずに宛先ディレクトリに配置されることが保証されます。これは、単一のファイルを取得し、ディレクトリ構造をシンプルに保ちたい場合に便利です。この設定では、ローカルホストの /home/labex/example/
ディレクトリから複数のファイル(example_2.txt
と example_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.txt
と example_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
このステップでは、変数を組み込むことにより、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_path
と dest_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 とそのモジュールをさらに探求し、自動化能力を向上させましょう。
楽しい自動化ライフを!