はじめに
リリースされたばかりの netbox.netbox コレクション 3.8.0で、こんな changelog がありました。
Allow netbox api access token to be templated by @TWitzenrath in #806
パッと見では分からなかったのですが、元の PR #806を見ると、netbox.netbox.nv_inventory
インベントリプラグインのことのようでした。
これまでは平文べた書きか ansible-vault
による暗号化文字列を指定していましたが、これにより指定方法の選択肢が増えました。
元の PR #806 では、community.hashi_vault.hashi_vault
lookup プラグインを使い、HashiCorp Vault を使って NetBox の token を取ってきて指定する、というユースケースでした。
token: "{{ lookup('community.hashi_vault.hashi_vault','secret=[...path...]/netbox:api_token')}}"
なるほどと思い、少し異なるパターンを試してみました。
- 環境
- ansible-core 2.13.1
- netbox.netbox コレクション 3.8.0
おため
私の環境では env lookup プラグインを使い、MY_NETBOX_TOKEN
という環境変数に仕込まれたtokenを利用してみます。
※なお、ドキュメントにもあるように環境変数 NETBOX_TOKEN
または NETBOX_API_KEY
に仕込んでおけば token
オプション自体不要です。ここでは token オプションの挙動を検証するためにあえて別の環境変数を利用しています。
test_nv_inventory.yml
--- plugin: netbox.netbox.nb_inventory api_endpoint: https://netbox.example.com token: "{{ lookup('env', 'NETBOX_TOKEN') }}" query_filters: - site: nagoya
ansible-inventory
コマンドでうまくデバイスを取得できるか確認します。
ansible-inventory -i test_nv_inventory.yml --graph # 環境変数 NETBOX_TOKEN は仕込み済み @all: |--@ungrouped: | |--nagoya-l2sw01 | |--nagoya-l2sw02 | |--nagoya-l2sw03
無事取得できました。
インベントリファイルに機密情報が入らなくなって良いなと思いました。