はじめに
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 は無視されます。
おわりに
リソースグループに限らず、インベントリファイルはそのままにして、コマンド側から少し対象の絞り込みなどを変えたいときはあるので、便利だと覆いました。