てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] netbox.netbox.nb_inventory インベントリプラグインの token でJinja2テンプレートが使えるようになった

はじめに

リリースされたばかりの 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

無事取得できました。

インベントリファイルに機密情報が入らなくなって良いなと思いました。

参考

tekunabe.hatenablog.jp