前回、Ansible AWX・Towerで発行しているコマンドの取得方法をご紹介しました。
今回はそこから、実行したジョブが作成する一時的な作業ディレクトリのパスを取得する方法を解説します。
プレイブックの構文
プレイブックに下記のように記述することで、作業ディレクトリのパスを取得することが可能です。
取得した結果は、変数「working_path」に格納されます。
---
- hosts: all
gather_facts: False
tasks:
- name: "作業ディレクトリパス"
vars:
working_path: "{{ (lookup('file', '/proc/self/cmdline') | regex_replace('\u0000',' ')).split()|select('match','^[@]')|list|first|regex_replace('/env/extravars','')|regex_replace('@','') }}"
debug:
msg: "作業ディレクトリパス:{{ working_path }}"
実行結果
Ansible AWXで実行した結果になります。
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [作業ディレクトリパス] **************************************************************
ok: [192.168.56.105] => {
"msg": "作業ディレクトリパス:/tmp/awx_725_qunpkyeh"
}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
リンク
処理待ちを入れた例
処理待ちを入れたプレイブックのサンプルになります。
サンプルでは待ち時間を5分にしています。
処理待ち中は、作業ディレクトリは削除されないため、内容を確認することが可能です。
---
- hosts: all
gather_facts: False
tasks:
- name: "作業ディレクトリパス"
vars:
working_path: "{{ (lookup('file', '/proc/self/cmdline') | regex_replace('\u0000',' ')).split()|select('match','^[@]')|list|first|regex_replace('/env/extravars','')|regex_replace('@','') }}"
debug:
msg: "作業ディレクトリパス:{{ working_path }}"
- name: "処理待ち"
pause:
minutes: 5
リンク
ディレクトリを退避する例
削除前に一時ディレクトリを退避する処理を入れたプレイブックです。
サンプルでは、取得したディレクトリを「/home/awx/」配下に格納しています。
---
- hosts: all
gather_facts: False
tasks:
- name: "作業ディレクトリパス取得"
set_fact:
working_path: "{{ (lookup('file', '/proc/self/cmdline') | regex_replace('\u0000',' ')).split()|select('match','^[@]')|list|first|regex_replace('/env/extravars','')|regex_replace('@','') }}"
- name: "作業ディレクトリの取得"
shell: "docker cp awx_task:{{ working_path }}/ /home/awx/"
become: yes
このサンプルを実行することで、一時ディレクトリを取得することが可能で、下記のようにテンプレート追加変数やジョブ環境変数を確認することが出来ます。
[root@localhost awx]# cat /home/awx/awx_745_baw_eizj/env/extravars !unsafe 'awx_job_id': 745 !unsafe 'awx_job_launch_type': !unsafe 'manual' !unsafe 'tower_job_id': 745 !unsafe 'tower_job_launch_type': !unsafe 'manual' !unsafe 'awx_user_id': 2 !unsafe 'awx_user_name': !unsafe 'awx' !unsafe 'awx_user_email': !unsafe 'awx@localhost' !unsafe 'awx_user_first_name': !unsafe "awx_\u540D\u524D" !unsafe 'awx_user_last_name': !unsafe "awx_\u82D7\u5B57" !unsafe 'tower_user_id': 2 !unsafe 'tower_user_name': !unsafe 'awx' !unsafe 'tower_user_email': !unsafe 'awx@localhost' !unsafe 'tower_user_first_name': !unsafe "awx_\u540D\u524D" !unsafe 'tower_user_last_name': !unsafe "awx_\u82D7\u5B57" !unsafe 'awx_inventory_id': 3 !unsafe 'awx_inventory_name': !unsafe 'Test Server Inventory' !unsafe 'tower_inventory_id': 3 !unsafe 'tower_inventory_name': !unsafe 'Test Server Inventory' !unsafe 'awx_project_revision': !unsafe '' !unsafe 'tower_project_revision': !unsafe '' !unsafe 'awx_job_template_id': 31 !unsafe 'awx_job_template_name': !unsafe 'Get Extra Vars Template' !unsafe 'tower_job_template_id': 31 !unsafe 'tower_job_template_name': !unsafe 'Get Extra Vars Template' t_array: - value1 - value2 t_vars_1: "\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u8FFD\u52A0\u5909\u6570\uFF11" t_vars_2: "\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u8FFD\u52A0\u5909\u6570\uFF12"
サンプルのプレイブックの実行結果も載せておきます。
Using /etc/ansible/ansible.cfg as config file
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [作業ディレクトリパス取得] ************************************************************
ok: [192.168.56.106] => {"ansible_facts": {"working_path": "/tmp/awx_745_baw_eizj"}, "changed": false}
TASK [作業ディレクトリの取得] *************************************************************
changed: [192.168.56.106] => {"changed": true, "cmd": "docker cp awx_task:/tmp/awx_745_baw_eizj/ /home/awx/", "delta": "0:00:00.216621", "end": "2022-08-17 15:35:44.519420", "rc": 0, "start": "2022-08-17 15:35:44.302799", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
PLAY RECAP *********************************************************************
192.168.56.106 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
記事は以上です。本来取得出来ない(マジック変数として用意されていない)追加変数の内容を確認することが出来ました。ホストごとの変数など、まだ試していないパラメータがあるので、色々試してみたいと思います。
コメント