Ansible AWXに指定した認証情報をplaybookの変数に引き渡す

Ansible AWXでジョブテンプレートに「認証情報」を使うとPlaybook内や環境変数に認証情報を持たせなくても、認証を通すことができます。ただ時々「認証情報」に設定したパラメータをプレイブックの変数に引き渡したいことがあります。

実はこれはものすごく簡単できます(とはいえ、ここまで来るのに半日費やしました)。たとえば AWXの認証情報に指定したAzure サービスプリンシパルの情報をPlaybookの変数として参照したい場合はplaybook内で以下の変数を使うことができます。この変数は予めAWXで定義されています(ここを参照してください)。

AZURE_CLIENT_ID
AZURE_SECRET
AZURE_SUBSCRIPTION_ID
AZURE_TENANT
AZURE_CLOUD_ENVIRONMENT

参照するときは “{{ lookup(‘env’,’変数’) }}” の形式で参照します。vars に上記の変数を定義する必要はありません。例えば、サブスクリプションIDをPlaybookで参照したい場合は下記のような使い方になります。

---
- name: Test
  hosts: localhost
  connection: local
  vars:
  tasks:
    - name: Display Azure Subscription ID
      debug:
        msg: "{{ lookup('env','AZURE_SUBSCRIPTION_ID') }}"

このPlaybookをAWXから実行すると以下のような結果になります。

[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Test] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Display Azure Subscription ID] *******************************************
ok: [localhost] => {
    "msg": "1a23b4c5-de67-8fg9-0h12-34567869i012"
}
PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ちゃんと調べていませんが、AWXの認証情報に設定したパラメータがOSユーザーの環境変数にセットされ、その環境変数を参照しているのだと思います。

<参考>
10.4.9. Microsoft Azure Resource Manager
env – read the value of environment variables
How can I use the AWX credential variables in playbooks?

コメント

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