はじめに
Ansible から Azure の VM の情報を取得して動的にインベントリを生成できる azure.azcollection.azure_rm
インベントリプラグインという便利なものがあります。
こちらの issue で、プライベートIPアドレスを接続先にするにはどうしたらよいかという質問がありました。パブリックIPアドレスを持っているとパブリックIPアドレスを優先するので、その挙動が不都合なことがあるようです。
回答した内容でうまくいったようなので、こちらにもまとめおきます。
- 環境
- azure.azcollection 1.14.0
ansible_host
変数にプライベートIPアドレスをセットする
インベントリファイル内で、hostvar_expressions
オプションを利用し、変数の対応付けをします。具体的には、接続先に利用する ansible_host
変数に private_ipv4_addresses | first
を設定します。
--- plugin: azure.azcollection.azure_rm plain_host_names: true # インベントリ名を仮想マシン名にする(本件とは直接関係ない) hostvar_expressions: ansible_host: private_ipv4_addresses | first # ポイント
インベントリファイル名の末尾は azure_rm.yaml
または azure_rm.yaml
である必要があります。
なお、変数の対応付けする類似オプションとして compose
がありますが、azure.azcollection
コレクション 1.14.0 までは対応していない(ドキュメントにはある)ようなのでご注意ください。1.15.0 で compose
に対応しました。
確認
ここでは、簡易的に ansible-inventory
コマンドで各ホストの変数を表示する方法で確認します。
% ansible-inventory -i azure_rm.yaml --list | grep ansible_host "ansible_host": "10.1.0.9", "ansible_host": "10.1.0.4", "ansible_host": "10.1.0.7", "ansible_host": "10.1.0.8",
プライベートIPアドレスがセットされていることが分かります。
おわりに
ドキュメントの例に、ぴったりな例がないので、分かりにくかったようです。よく使いそうな例があるだけでドキュメントとしての価値は上がると思うので、今後もし追加したほうがよさそうな例があれば追加してみたいと思いました。