【Ansible Tower/AWX】実行したジョブの一時作業ディレクトリパスを取得する


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

Ansible AWX

前回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で実行した結果になります。

こちらのディレクトリですが、ジョブが終了した時点で削除されます。
なので、ディレクトリ配下のファイルを確認する場合は、ファイルの退避や処理待ちを入れる必要があります。

また、AWXでは、Dockerコンテナ内のパスを指しているので注意が必要です。
Dockerコンテナにあるファイルの転送コンテナへの接続方法は下記の記事をご覧下さい。

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分にしています。
処理待ち中は、作業ディレクトリは削除されないため、内容を確認することが可能です。

AWXやTowerは、コマンドライン版のAnsibleとは違い、処理待ちを「Ctrl + C」で強制終了することが出来ません。
強制終了するには、画面から「ジョブの取り消し」を行ってください。

---
- 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

このサンプルを実行することで、一時ディレクトリを取得することが可能で、下記のようにテンプレート追加変数やジョブ環境変数を確認することが出来ます。

日本語で設定している値については、Unicodeで保存されています。

下記は設定しているテンプレート追加変数で、日本語と英語が混在しています。
赤字部分記述のように、日本語部分がUnicodeになっていることが確認出来ます。

t_array:
  - value1
  - value2
t_vars_1: テンプレート追加変数1
t_vars_2: テンプレート追加変数2
[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

記事は以上です。本来取得出来ない(マジック変数として用意されていない)追加変数の内容を確認することが出来ました。ホストごとの変数など、まだ試していないパラメータがあるので、色々試してみたいと思います。

コメント

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