てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible/Azure] azure.azcollection.azure_rm インベントプラグインで、対象リソースグループを環境変数で指定する

はじめに

Ansible から Azure の VM の情報を取得して動的にインベントリを生成できる azure.azcollection.azure_rm インベントリプラグインでは、従来から include_vm_resource_groups オプションで、どのリソースグループに所属する VM かを絞り込みできます。

2023年3月にリリースされた azure.azcollection コレクション 1.15.0 では、環境変数でも対象リソースグループを指定できるようになりました。

changelog より

azure_rm.py: support for environment variable ANSIBLE_AZURE_VM_RESOURCE_GROUPS (#975)

変数名は ANSIBLE_AZURE_VM_RESOURCE_GROUPS です。この改善により、インベントリファイルを変更せずに、コマンド側で対象リソースグループをころころ変えることができるようになりました。

公式ドキュメントへの反映だけ PR を出したのですが、 1.15.0 のリリースにはマージが間に合いませんでした。

代わりに本記事で紹介します。

  • 環境
    • azure.azcollection 1.15.0
    • ansible-core 2.14.1

インベントリファイル

今回は以下のインベントリファイルを利用します。include_vm_resource_groups は指定していません。分かりやすいようにリソースグループの名前でをベースでホストのグループを作るようにしています。

---
plugin: azure.azcollection.azure_rm
plain_host_names: true # インベントリ名を仮想マシン名にする(本件とは直接関係ない)
keyed_groups:
  - key: resource_group
    separator: ""    # (おまけ) これを指定するとグループ名の先頭に `_` がつかず、単にリソースグループ名になる

インベントリファイル名の末尾は azure_rm.yaml または azure_rm.yamlある必要があります

確認

今回は ansible-inventory コマンドで、ホストの一覧をグループ階層含めて表示して確認します。

ANSIBLE_AZURE_VM_RESOURCE_GROUPS でリソースグループを複数指定する場合はカンマ区切りで指定します。

$ export ANSIBLE_AZURE_VM_RESOURCE_GROUPS=haze,koi    # 環境変数の指定
$ ansible-inventory -i inventory_azure_rm.yml --graph
@all:
  |--@haze:
  |  |--mahaze
  |  |--yoshinobori
  |--@koi:
  |  |--funa
  |  |--oikawa
  |  |--ugui
  |--@ungrouped:

グループ名から、対象のリソースグループに絞り込めていることが分かります(実際は他のリソースグループに所属のVMもあります)。

その場限りの指定なら↓でも OKです。

ANSIBLE_AZURE_VM_RESOURCE_GROUPS=haze,koi ansible-inventory -i inventory_azure_rm.yml --graph

補足: ANSIBLE_AZURE_VM_RESOURCE_GROUPS が優先される

ANSIBLE_AZURE_VM_RESOURCE_GROUPS と、インベントリファイル内の include_vm_resource_groups を併用した場合、ANSIBLE_AZURE_VM_RESOURCE_GROUPS のほうが優先され、include_vm_resource_groups は無視されます。

おわりに

リソースグループに限らず、インベントリファイルはそのままにして、コマンド側から少し対象の絞り込みなどを変えたいときはあるので、便利だと覆いました。