NetBoxのダイナミックインベントリは以前さわったときに使い方を以下にざっくりまとめてた。
今回はインベントリファイルというより接続情報の書き方についておさらい。
基本的な書き方
以下のようにapi_endpointにNetBoxのURLを、tokenにアクセストークンを記述する。
--- plugin: netbox.netbox.nb_inventory api_endpoint: https://netbox.k3s-node.naru.jp-z.jp/ token: curry_oishii_mainichi_taberu validate_certs: false group_by: - device_roles - device_types - status
が、エンドポイントはともかくトークンをハードコードするのは運用上あまり良くないので回避したいところ。
また、エンドポイントも本番と開発でアドレスが異なるような使い方をしたい場合にはやはり可変にしたい。
環境変数を使った外部からの変数指定
ドキュメントに書かれているが、api_endpointとtokenはそれぞれ環境変数で指定できる。
| モジュールパラメタ | 対応する環境変数 |
|---|---|
| api_endpoint | NETBOX_API |
| token | NETBOX_TOKEN |
これを踏まえると、上記のインベントリファイルはapi_endpointとtokenを除いて以下のように書ける。
plugin: netbox.netbox.nb_inventory validate_certs: false group_by: - device_roles - device_types - status
そしてansible-inventoryCLIコマンドであれば、(正確には環境変数でなくシェル変数だが)以下のように変数指定して実行可能。
$ NETBOX_API=https://netbox.k3s-node.naru.jp-z.jp/ NETBOX_TOKEN=curry_oishii_mainichi_taberu ansible-inventory -i netbox-dynamic-inventory.yml --list
{
"_meta": {
"hostvars": {
"pve01": {
"ansible_host": ...,
:
:
}
これで、トークンをハードコードせずに済むし、環境によって異なる変数を外部から与えることもできる。
validate_certsは環境変数でセットできないので、falseを指定しておくのが無難。
最初にやりがちだけど、以下のようにJinja2テンプレートで記述し、-eを使ったExtra Vars指定したりしても動作しない。
(正確にはtokenは変数参照できるがapi_endpointは変数参照がプラグイン側に実装されていない)
--- plugin: netbox.netbox.nb_inventory api_endpoint: "{{ netbox_api_endpoint }}" token: "{{ netbox_token }}"
AWX/AAPの場合
これもExampleの「For use in Ansible Tower (AWX)」の部分に載っているが、エンドポイントとトークンを格納するための認証情報タイプを作成し、そこへ使用したいアクセス情報をセットすればよい。
認証情報タイプ

認証情報

taskでの作成
この内容の認証情報タイプ・認証情報を作成するタスクは以下の通り。
- name: create netbox-inventory credential type awx.awx.credential_type: name: netbox_inventory kind: cloud inputs: fields: - id: NETBOX_API type: string label: NetBox Host URL - id: NETBOX_TOKEN type: string label: NetBox API Token secret: true required: - NETBOX_API - NETBOX_TOKEN injectors: env: NETBOX_API: "{% raw -%}{{ NETBOX_API }}{%- endraw %}" NETBOX_TOKEN: "{% raw -%}{{ NETBOX_TOKEN }}{%- endraw %}" - name: create netbox-inventory credential awx.awx.credential: name: netbox_inventory credential_type: netbox_inventory organization: Default inputs: NETBOX_API: https://netbox.k3s-node.naru.jp-z.jp/ NETBOX_TOKEN: curry_oishii_mainichi_taberu
リソースの作成方法については以下参照。