【Ansible Tower/AWX】fetchモジュールの使い方


この記事はプロモーションを含みます。

Ansible

ホーム > Ansible Tower・AWX リファレンス

AnsibleのfetchモジュールをAWXと組み合わせて使用する方法を解説します。
fetchモジュールでは、被管理ホストからファイルをダウンロードすることが可能です。
コマンドラインのAnsible、Towerでも同様に使用可能です。

fetchモジュールについて

fetchモジュールは、一方通行(被管理ホスト→コントローラーサーバー)の[cp]コマンドのような動作をするモジュールです。
しかし、[cp]コマンドとは違い、ディレクトリのコピーが出来ないなど様々な制限があります。
制限としては、以下のようなものがあります。

  • ディレクトリは取得出来ない
  • 1つのファイルしか取得出来ない
  • 権限や所有者、グループは保持出来ない

fetchモジュールで使用出来るパラメータになります。
これらを組み合わせることで、様々な処理を行うことが可能です。

パラメータ選択肢/デフォルト機能
dest必須fetchするファイルの保存先を指定する。
fail_on_missing・no
yes←
[yes]の場合、リモートファイルを読み込めない場合にタスクが失敗する。
flatno←
・yes
[yes]かつdestの値が[/]で終わっている場合、destで指定したディレクトリ直下にファイルをfetchする。
[yes]かつdestの値が[/]で終わっていない場合、destで指定したディレクトリ名にファイルをリネームしつつfetchする。
[yes]に設定し、なおかつ複数のホストに接続した場合、同名のファイルをfetchすると、上書きされてしまう場合があるので注意が必要です。
src必須fetchするリモートのファイルを指定する。
ディレクトリは指定出来ません。
validate_checksum・no
yes←
fetchしたファイルとリモートファイルのチェックサムが一致することを確認します。

AWXの各種定義

Ansible AWX での各種定義について記載しています。

テンプレート

今回実行するテンプレートの設定になります。

  • 名前:Module Fetch Template
  • 説明:fetchモジュール
  • ジョブタイプ:実行
  • インベントリー:SyuTaku Server Inventory
  • プロジェクト:秋拓プロジェクト
  • PLAYBOOK:fetch.yml
  • 認証情報:awx
  • 詳細:1(Verbose)

認証情報

今回使用する認証情報の設定になります。

  • 名前:awx
  • 説明:awxユーザ
  • 認証情報タイプ:マシン
  • ユーザー名:awx
  • パスワード:「ユーザー名」に設定したユーザーに対応したパスワード

インベントリー

特別な設定はしていないため割愛します。

最小限の設定例(src,destのみ)

fetchモジュールの必須パラメーターである「src」と「dest」のみを指定して、ファイルのダウンロードを行う例です。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: ファイルのダウンロード
    fetch:
      src: /home/workspace/Test/file1.txt
      dest: /home/workspace/

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ファイルのダウンロード] *************************************************************
changed: [SYUTAKUWEB01] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/workspace/SYUTAKUWEB01/home/workspace/Test/file1.txt", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "remote_md5sum": null}

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

フェッチしたファイルは、以下のような階層構造で格納されます。

/home/workspace/SYUTAKUWEB01/home/workspace/Test/file1.txt

分かりやすくすると、以下のようになります。

<[dest]の値>/<接続先のホスト名>/<[src]の値>

[dest]で指定したパスが存在しないディレクトリの場合は、
自動的にディレクトリが作成されます。

[flat]の使用例([dest]の末尾に[/]あり)

fetchモジュールの必須パラメーターに加えて、[flat]を追加し、
さらに、[dest]で指定するパスの末尾に[/]がある場合の例です。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: ファイルのダウンロード
    fetch:
      src: /home/workspace/Test/file1.txt
      dest: /home/workspace/
      flat: yes

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ファイルのダウンロード] *************************************************************
changed: [SYUTAKUWEB01] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/workspace/file1.txt", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "remote_md5sum": null}

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

フェッチしたファイルは、以下のような階層構造で格納されます。
[src]で指定したファイルのみが、[dest]で指定したパスに転送された形になります。

/home/workspace/file1.txt

[flat]の使用例([dest]の末尾に[/]なし)

fetchモジュールの必須パラメーターに加えて、[flat]を追加し、
さらに、[dest]で指定するパスの末尾に[/]が無い場合の例です。

プレイブック

末尾に[/]が無い場合は、[dest]に指定した値の最後尾にあるファイルにリネームする処理が走ります。
サンプルでは「file2.txt」としているので、「file1.txt」が「file2.txt」にリネームされます。

もしも、[dest]を「/home/workspace」とした場合、
「file1.txt」を「workspace」にリネームしようとします。
しかし「workspace」というディレクトリが存在するため、
以下のようなエラーが発生するので、パスの指定には注意が必要です。

fatal: [SYUTAKUWEB01]: FAILED! => {"changed": false, "msg": "dest is an existing directory, use a trailing slash if you want to fetch src into that directory"}
---
- hosts: all
  gather_facts: False
  tasks:

  - name: ファイルのダウンロード
    fetch:
      src: /home/workspace/Test/file1.txt
      dest: /home/workspace/file2.txt
      flat: yes

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ファイルのダウンロード] *************************************************************
changed: [SYUTAKUWEB01] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/workspace/file2.txt", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "remote_md5sum": null}

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

コメント

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