ホーム > Ansible Tower・AWX・AAP リファレンス
Ansible Tower/AAP環境のfetchモジュールが正常終了しているにも関わらず、ファイルが見つからない場合の対処方法について解説します。
はじめに・環境
Ansible Tower・AAP(Ansible Automation Platform)にて、fetchモジュールでターゲットノード(被管理ホスト)からファイルをダウンロードした際、ジョブが正常終了しているにも関わらず、ファイルが見つからない(ファイルがダウンロードされていない)事象の原因と対処方法について説明します。
下記は、本記事執筆時の環境情報です。
- コントロールノード
- OS:Red Hat Enterprise Linux release 8.6 (Ootpa)
- AAPバージョン:Ansible Automation Platform 2.4(以降はAAPと記載)
- ターゲットノード
- OS:AlmaLinux release 9.0 (Emerald Puma)
fetchモジュールについては、以下で解説しています。
事象
ここでは、今回の事象であるファイルが見つからない状態について記載しています。
プレイブック
fetchモジュールを実行するだけの簡単なプレイブックです。
今回はターゲットノードから、「main.py」というファイルをコントロールノードにダウンロードします。
---
- hosts: all
gather_facts: False
tasks:
- name: ファイルのダウンロード
fetch:
src: /home/work/main.py
dest: /home/awx/dir
実行結果
ここでは、プレイブックの実行結果とコントロールノードの状態を確認します。
まずは、プレイブックの実行結果です。
実行結果からはジョブが正常に終了し、下記にダウンロードされたように見えます。
パス:/home/awx/dir/TESTSV01/home/work/main.py
PLAYBOOK: fetch.yml ************************************************************
1 plays in fetch.yml
PLAY [all] *********************************************************************
TASK [ファイルのダウンロード] **************************************************
task path: /runner/project/fetch.yml:10
changed: [TESTSV01] => {"changed": true, "checksum": "0afde05226987895d09008c746c828d6fdca6a36", "dest": "/home/awx/dir/TESTSV01/home/work/main.py", "md5sum": "c3403e120c77bd79555df77044bb5319", "remote_checksum": "0afde05226987895d09008c746c828d6fdca6a36", "remote_md5sum": null}
PLAY RECAP *********************************************************************
TESTSV01 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
では、コントロールノードを確認してみます。
ジョブが正常終了しましたが、ファイルがありません。
[root@RHEL86AAP awx]# ls -al /home/awx/dir/ 合計 0 drwxr-xr-x. 2 awx awx 6 1月 7 17:16 . drwxr-xr-x. 3 awx awx 28 1月 7 17:03 ..
では、次項で対処方法について説明していきたいと思います。
原因と対処方法
ここでは、原因と対処方法について説明します。
まずは、原因についてですが、Ansible TowerやAAPではセキュリティを高めるため、特定のディレクトリ以外は、Ansibleから参照出来ないようになっています。
こちらの機能は、Ansible Tower・AAPでは「分離されたジョブに公開するパス」という設定で、Bubblewrap(bwrap)というもので作られているようです。
次に、対処方法についてですが、原因にある通り、システム設定から「分離されたジョブに公開するパス」の設定値を変更します。
AAPのメインメニューより「設定 > ジョブ設定」画面を開きます。
下にスクロールすると「分離されたジョブに公開するパス」の設定画面があるので、Ansibleから参照したいディレクトリを追記します。
今回は「/home/awx」を追記しました。
対処方法は以上となります。
対処後の確認
ここでは、前項の設定が正しく効いているか確認します。
プレイブック
今回は、fetchモジュールの実行に加え、前後にファイルの確認処理を追加しました。
---
- hosts: all
gather_facts: False
tasks:
- name: ダウンロード前の確認
shell: ls -lR /home/awx/
delegate_to: localhost
- name: ファイルのダウンロード
fetch:
src: /home/work/main.py
dest: /home/awx/dir
- name: ダウンロード後の確認
shell: ls -lR /home/awx/
delegate_to: localhost
実行結果
ここでは、プレイブックの実行結果とコントロールノードの状態を確認します。
まずは、プレイブックの実行結果です。
タスク「ダウンロード後の確認」を確認すると、「ダウンロード前の確認」では存在しなかった「main.py」があるため、正しくダウンロードされていることが分かります。
PLAYBOOK: fetch.yml ************************************************************
1 plays in fetch.yml
PLAY [all] *********************************************************************
TASK [ダウンロード前の確認] ****************************************************
task path: /runner/project/fetch.yml:6
changed: [TESTSV01 -> localhost] => {"changed": true, "cmd": "ls -lR /home/awx/", "delta": "0:00:00.005863", "end": "2024-01-07 22:44:24.889353", "msg": "", "rc": 0, "start": "2024-01-07 22:44:24.883490", "stderr": "", "stderr_lines": [], "stdout": "/home/awx/:\\ntotal 0\\ndrwxr-xr-x. 2 root root 6 Jan 7 22:16 dir\\n-rw-r--r--. 1 nobody nobody 0 Jan 7 12:40 web.log\\n\\n/home/awx/dir:\\ntotal 0", "stdout_lines": ["/home/awx/:", "total 0", "drwxr-xr-x. 2 root root 6 Jan 7 22:16 dir", "-rw-r--r--. 1 nobody nobody 0 Jan 7 12:40 web.log", "", "/home/awx/dir:", "total 0"]}
TASK [ファイルのダウンロード] **************************************************
task path: /runner/project/fetch.yml:10
changed: [TESTSV01] => {"changed": true, "checksum": "0afde05226987895d09008c746c828d6fdca6a36", "dest": "/home/awx/dir/TESTSV01/home/work/main.py", "md5sum": "c3403e120c77bd79555df77044bb5319", "remote_checksum": "0afde05226987895d09008c746c828d6fdca6a36", "remote_md5sum": null}
TASK [ダウンロード後の確認] ****************************************************
task path: /runner/project/fetch.yml:15
changed: [TESTSV01 -> localhost] => {"changed": true, "cmd": "ls -lR /home/awx/", "delta": "0:00:00.007972", "end": "2024-01-07 22:44:26.019413", "msg": "", "rc": 0, "start": "2024-01-07 22:44:26.011441", "stderr": "", "stderr_lines": [], "stdout": "/home/awx/:\\ntotal 0\\ndrwxr-xr-x. 3 root root 22 Jan 7 22:44 dir\\n-rw-r--r--. 1 nobody nobody 0 Jan 7 12:40 web.log\\n\\n/home/awx/dir:\\ntotal 0\\ndrwxr-xr-x. 3 root root 18 Jan 7 22:44 TESTSV01\\n\\n/home/awx/dir/TESTSV01:\\ntotal 0\\ndrwxr-xr-x. 3 root root 18 Jan 7 22:44 home\\n\\n/home/awx/dir/TESTSV01/home:\\ntotal 0\\ndrwxr-xr-x. 2 root root 21 Jan 7 22:44 work\\n\\n/home/awx/dir/TESTSV01/home/work:\\ntotal 4\\n-rw-r--r--. 1 root root 236 Jan 7 22:44 main.py", "stdout_lines": ["/home/awx/:", "total 0", "drwxr-xr-x. 3 root root 22 Jan 7 22:44 dir", "-rw-r--r--. 1 nobody nobody 0 Jan 7 12:40 web.log", "", "/home/awx/dir:", "total 0", "drwxr-xr-x. 3 root root 18 Jan 7 22:44 TESTSV01", "", "/home/awx/dir/TESTSV01:", "total 0", "drwxr-xr-x. 3 root root 18 Jan 7 22:44 home", "", "/home/awx/dir/TESTSV01/home:", "total 0", "drwxr-xr-x. 2 root root 21 Jan 7 22:44 work", "", "/home/awx/dir/TESTSV01/home/work:", "total 4", "-rw-r--r--. 1 root root 236 Jan 7 22:44 main.py"]}
PLAY RECAP *********************************************************************
TESTSV01 : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
では、コントロールノードを確認してみます。
ファイルが存在するので、無事にファイルがダウンロードされたことが分かります。
[root@RHEL86AAP awx]# ls -lR /home/awx/ /home/awx/: 合計 0 drwxr-xr-x. 3 awx awx 22 1月 7 17:44 dir -rw-r--r--. 1 nginx nginx 0 1月 7 07:40 web.log /home/awx/dir: 合計 0 drwxr-xr-x. 3 awx awx 18 1月 7 17:44 TESTSV01 /home/awx/dir/TESTSV01: 合計 0 drwxr-xr-x. 3 awx awx 18 1月 7 17:44 home /home/awx/dir/TESTSV01/home: 合計 0 drwxr-xr-x. 2 awx awx 21 1月 7 17:44 work /home/awx/dir/TESTSV01/home/work: 合計 4 -rw-r--r--. 1 awx awx 236 1月 7 17:44 main.py
記事は以上です。Ansible TowerやAAP環境では、fetchモジュールの挙動に一癖あることが分かりました。上手く動かない場合は、本記事を参考にして頂ければと思います。
コメント