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?
コメント