はじめに
この実験では、Ansible の get_url モジュールを調べます。このモジュールを使うと、インターネットからファイルをダウンロードして、リモート ホストに保存することができます。get_url モジュールには、認証、ヘッダー、チェックサム検証など、ダウンロード プロセスをカスタマイズするためのさまざまなオプションが用意されています。
URL からファイルをダウンロードする
このステップでは、Ansible の get_url モジュールを使って、URL からファイルをダウンロードして、リモート ホストに保存します。
まず、新しい Ansible プレイブック ファイル /home/labex/project/get_url-module-playbook.yaml を作成し、テキスト エディタで開きます。
プレイブック ファイルに次の内容を追加します。
- hosts: localhost
tasks:
- name: Download a file from a URL
get_url:
url: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
dest: "/tmp/ansible-2.9.25.tar.gz"
hosts: これは、プレイブックを実行する対象のホストを指定します。この場合、対象のホストがlocalhostなので、プレイブックはローカル ホストで実行されます。tasks: 実行するタスクのリストです。name: これは、タスクの目的を識別するためのタスクの説明的な名前です。get_url: これは、Ansible でインターネットからファイルをダウンロードするために使用するモジュールです。url: このパラメータは、ファイルをダウンロードする URL を指定します。この場合、公式の Ansible リリースからAnsibleバージョン 2.9.25 をダウンロードしています。dest: このパラメータは、ダウンロードされたファイルを保存する対象のホスト上の宛先パスを指定します。この場合、ファイルを/tmp/ansible-2.9.25.tar.gzに保存しています。
要するに、このプレイブックは指定された URL から Ansible バージョン 2.9.25 の tarball をダウンロードし、ローカル ホストの /tmp/ansible-2.9.25.tar.gz に保存します。
次に、次のコマンドでプレイブックを実行します。
ansible-playbook get_url-module-playbook.yaml
ファイルが正常にダウンロードされてリモート ホストに保存されたかどうかを確認するために、出力を見てください。 例の出力:
[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 [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Download a file from a URL] **********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ファイルが正常にダウンロードされてリモート ホストに保存されたことを確認します。
ll /tmp/ansible-2.9.25.tar.gz
例の出力:
-rw-rw-r-- 1 labex labex 14M Mar 15 13:03 /tmp/ansible-2.9.25.tar.gz
HTTP リクエストヘッダーをカスタマイズする
このステップでは、Ansible の get_url モジュールを使って、ファイルのダウンロード プロセス中に送信される HTTP リクエスト ヘッダーをカスタマイズします。
まず、既存のプレイブック ファイルの内容をすべて削除し、次の内容を追加して修正します。
- hosts: localhost
tasks:
- name: Download a file from a URL with custom headers
get_url:
url: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
dest: "/tmp/ansible-2.9.25-1.tar.gz"
headers:
Custom-Header-1: Value1
Custom-Header-2: Value2
get_url: これは、Ansible でインターネットからファイルをダウンロードするために使用するモジュールです。url: このパラメータは、ファイルをダウンロードする URL を指定します。この場合、公式の Ansible リリースからAnsibleバージョン 2.9.25 をダウンロードしています。dest: このパラメータは、ダウンロードされたファイルを保存する対象のホスト上の宛先パスを指定します。この場合、ファイルを/tmp/ansible-2.9.25-1.tar.gzに保存しています。headers: これはオプションのパラメータで、ファイルをダウンロードする際にサーバーに送信する HTTP リクエストに含めるカスタム ヘッダーを指定できます。この場合、2 つのカスタム ヘッダーを含めるように設定されています。Custom-Header-1の値はValue1、Custom-Header-2の値はValue2です。これらのヘッダーは、ファイルをホストするサーバーの要件に応じて、認証、承認、またはその他の目的に使用される場合があります。
要するに、このプレイブックは指定された URL から HTTP リクエストにカスタム ヘッダーを含めて Ansible バージョン 2.9.25 の tarball をダウンロードし、ローカル ホストの /tmp ディレクトリに ansible-2.9.25-1.tar.gz として保存します。
次に、次のコマンドでプレイブックを実行します。
ansible-playbook get_url-module-playbook.yaml
ファイルが正常にダウンロードされてリモート ホストに保存されたかどうかを確認するために、出力を見てください。また、HTTP リクエストにカスタム ヘッダーが含まれているかどうかも確認してください。 例の出力:
[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 [localhost] **************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Download a file from a URL with custom headers] **************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ファイルが正常にダウンロードされてリモート ホストに保存されたことを確認します。
ll /tmp/ansible-2.9.25-1.tar.gz
例の出力:
-rw-rw-r-- 1 labex labex 14M Mar 15 13:17 /tmp/ansible-2.9.25-1.tar.gz
チェックサムを使ってファイルの整合性を検証する
このステップでは、Ansible の get_url モジュールを使って、ダウンロードしたファイルの整合性をチェックサムを用いて検証します。
まず、既存のプレイブック ファイルの内容をすべて削除し、次の内容を追加して修正します。
- hosts: localhost
tasks:
- name: Download a file and verify checksum
get_url:
url: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
dest: "/tmp/ansible-2.9.25-2.tar.gz"
checksum: "sha256:https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz.sha"
get_url: これは、Ansible でインターネットからファイルをダウンロードするために使用するモジュールです。url: このパラメータは、ファイルをダウンロードする URL を指定します。この場合、公式の Ansible リリースからAnsibleバージョン 2.9.25 をダウンロードしています。dest: このパラメータは、ダウンロードされたファイルを保存する対象のホスト上の宛先パスを指定します。この場合、ファイルを/tmp/ansible-2.9.25-2.tar.gzに保存しています。checksum: このパラメータは、ダウンロード中のファイルのチェックサムとその種類を指定するために使用されます。この場合、sha256:https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz.shaに設定されており、Ansible は指定された URL で提供されるチェックサムと比較して、ダウンロードされたファイルのSHA256チェックサムを検証するようになっています。これにより、ダウンロードされたファイルの整合性が保証されます。
要するに、このプレイブックは指定された URL から Ansible バージョン 2.9.25 の tarball をダウンロードし、ローカル ホストの /tmp ディレクトリに ansible-2.9.25-2.tar.gz として保存し、指定された URL で提供されるチェックサムとその SHA256 チェックサムを比較することでその整合性を検証します。
次に、次のコマンドでプレイブックを実行します。
ansible-playbook get_url-module-playbook.yaml
ファイルが正常にダウンロードされてリモート ホストに保存されたかどうかを確認するために、出力を見てください。また、チェックサム検証が合格したかどうかも確認してください。 例の出力:
[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 [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Download a file and verify checksum] *************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ファイルが正常にダウンロードされてリモート ホストに保存されたことを確認します。
ll /tmp/ansible-2.9.25-2.tar.gz
例の出力:
-rw-rw-r-- 1 labex labex 14M Mar 15 13:31 /tmp/ansible-2.9.25-2.tar.gz
まとめ
おめでとうございます!あなたは Ansible の get_url モジュールの実験を成功裏に完了しました。URL からファイルをダウンロードし、リモート ホストに保存し、HTTP リクエスト ヘッダーをカスタマイズし、チェックサムを使ってファイルの整合性を検証する方法を学びました。
get_url モジュールは、ファイルのダウンロードを自動化し、ダウンロード プロセスのさまざまな側面を処理するための多用途なツールです。この知識を使って、あなたは Ansible プレイブックを強化し、インフラストラクチャ全体でのファイル配布を効率的に管理することができます。
Ansible のドキュメントをさらに探求し、さまざまなモジュールを試して、自動化機能を拡大してください。楽しい Ansible の旅を!


