【Ansible Tower/AWX】プレイブック名の取得


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

Ansible

前回は、Ansible AWX・Towerで発行しているコマンドの取得方法をご紹介しました。
今回は、それを加工して、実行したプレイブックのファイル名を取得する方法を解説します。

プレイブックの構文

プレイブックに下記のように記述することで、プレイブック名を取得することが可能です。
取得した結果は、変数「playbook_name」に格納されます。

ここで、取得されるプレイブック名についてですが、
最上位のプレイブック名(AWX・Towerのテンプレートに設定されている)が取得されます。
仮に、import_tasks(include_tasks)などで、外部プレイブックの呼び出しを行い、呼び出し先でプレイブック名を取得した場合にも、外部のプレイブックではなく、最上位のプレイブック名が取得される点に注意が必要です。

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

  - name: "プレイブック名の取得"
    vars:
      playbook_name: "{{ (lookup('file', '/proc/self/cmdline') | regex_replace('\u0000',' ')).split()|select('match','^[a-z-_/]*[.]y[a]*ml')|list|first|basename }}"
    debug:
      msg: "実行プレイブック名:{{ playbook_name }}"

実行結果

今回は、Ansible AWXで実行したので、そのジョブの実行結果になります。

SSH password: 
BECOME password[defaults to SSH password]: 

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

TASK [プレイブック名の取得] **************************************************************
ok: [SYUTAKUAPL01] => {
    "msg": "実行プレイブック名:util.yml"
}

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

記事は以上です。AWX・Towerでは、実行結果ログをテキストファイルで取得することも可能ですが、そのログには実行したプレイブック名が出力されていません。
なので、ジョブの頭で本処理を実行しておくことで、テキスト形式のログでも実行したプレイブック名を確認することが可能になります。
部品化などしておくと便利かもしれませんね。

コメント

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