2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ansible】NetBoxのホスト情報をインベントリとして使用したい~AAP編~

Last updated at Posted at 2025-09-08

はじめに

以前の記事(【Ansible】NetBoxのホスト情報をインベントリとして使用したい~ansible-navigator編~)では、手元のPCでansible-navigatorを実行してNetBoxの情報を利用する方法をご紹介しました。
今回はその発展編として、チームでの本格的な自動化を実現する基盤「Ansible Automation Platform(以下、AAP)」を使っていきます。
AAPを使うと、パスワードなどの大事な情報を安全に管理したり、チームで自動化の実行環境を統一したりと、より高度で安全な自動化が実現できるのでぜひ活用していきましょう。

TL;DR

この記事を読めば、以下のことができるようになります

  • Ansible Automation Platform (AAP) のインベントリソースとしてNetBoxを連携させる方法
  • AAPの Credentialを使い、NetBoxのAPIトークンなどをコードに直接書くことなく安全に管理する方法
  • インベントリ同期のために、専用の実行環境 (Execution Environment) をAAP上で設定・使用する方法

前提条件

  • NetBoxで以下が作成済みであること

    • APIトークン: NetBoxへのAPIアクセスに必要です

    • デバイス: 以下のデバイスが作成済みであること(未記載の情報の設定は任意)

      device manufacturers IP Address(※1)
      cisco01 cisco 192.168.0.1/24
      cisco02 cisco 192.168.1.1/24
      juniper01 juniper 192.168.2.1/24
      juniper02 juniper 192.168.3.1/24

      ※1:IP AddressはプライマリIPに設定しておくこと

  • 以下の条件を満たすAnsibleの実行環境イメージがコンテナレジストリ(今回Docker Hub)に存在すること

  • AAPとコード管理ツール(SCM, 例: Git)が連携済みであること

    • AAPに作成済みのプロジェクトの名前は、proj_netboxとします
    • プロジェクトの連携先であるSCMリポジトリの名前は、repo_netboxとします

:bulb: SCMとの連携
AAPはGitなどのリポジトリから設定ファイル(inventory.ymlなど)を読み込みます

実行環境

  • NetBox: v4.2.8
  • Ansible Automation Platform 2.5
    • Automation Controller: v4.6.9

詳細

1. 連携先のSCMリポジトリ(repo_netbox)

フォルダ構成

フォルダ構成は以下のようになっています。今回は、AAPでNetBoxのホスト情報の取得のみを実施するので、Playbookは省略します。

  • :file_folder: group_vars
    • :page_facing_up: manufacturers_cisco.yml
    • :page_facing_up: manufacturers_juniper.yml
  • :page_facing_up: inventory.yml

inventory.yml

ここがNetBoxと連携するための心臓部です。
AAPからNetBoxの情報をインベントリとして利用するための設定ファイルを用意します。
AAPを使う最大のメリットは、認証情報(APIトークンなど)をコードから分離できることです。
そのため、ファイルには「plugin(どのプラグインを使うか)」と「group_by(何でグループ分けするか)」だけを記述します。
api_endpoint(NetBoxのURL)と token(APIトークン)は、後の手順でAAPの安全な場所に保管します。

---
plugin: netbox.netbox.nb_inventory
group_by:
  - manufacturers

【参考】以前の記事、【Ansible】NetBoxのホスト情報をインベントリとして使用したい~ansible-navigator編~の時は以下のように定義していました。

---
plugin: netbox.netbox.nb_inventory
api_endpoint: http://XXX.XXX.XXX.XXX    # NetBoxのURL
token: netbox_token                     # NetBoxのAPIトークン
group_by:
  - manufacturers

manufacturers_cisco.yml

manufacturers_ciscoグループが使用する変数です。
中身は以前の記事、【Ansible】NetBoxのホスト情報をインベントリとして使用したい~ansible-navigator編~と同じです。

---
ansible_user: cisco_user
ansible_password: cisco_password

manufacturers_juniper.yml

manufacturers_juniperグループが使用する変数です。
中身は以前の記事、【Ansible】NetBoxのホスト情報をインベントリとして使用したい~ansible-navigator編~と同じです。

---
ansible_user: juniper_user
ansible_password: juniper_password

2. AAPの設定

ここからはAAPの画面で設定を入れていきます

Credential Types

ここが今回のポイントの1つ目です。
NetBoxに接続するための認証情報(URLとAPIトークン)をまとめて管理できる、専用の「認証情報タイプ(Credential Type)」を作成します。こうすることで、後から誰でも簡単にNetBox用の認証情報を作成できるようになります。
詳細は、公式ドキュメント(netbox.netbox.nb_inventory inventory)を参照してください。

  • 設定箇所
    • Automation Execution > Infrastructure > Credential Types
  • 設定内容
    • 名前: NetBox Cred Type

    • Input configuration

      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
      
    • Injector configuration

      env:
        NETBOX_API: '{{ NETBOX_API }}'
        NETBOX_TOKEN: '{{ NETBOX_TOKEN }}'
      

認証情報(NetBox接続用)

先ほど作成したCredential Typeを使用して、実際のNetBox接続情報を登録します。

  • 設定箇所
    • Automation Execution > Infrastructure > 認証情報
  • 設定内容
    • 名前: cred_netbox
    • 組織: Default
    • 認証情報タイプ: NetBox Cred Type
    • NetBox Host URL: NetBoxのURL
    • NetBox API Token: NetBoxのAPIトークン

認証情報(Docker Hub接続用)

今回は、Ansibleの実行環境イメージがDocker Hubにあると仮定するので認証情報は以下のようにしています。

  • 設定箇所
    • Automation Execution > Infrastructure > 認証情報
  • 設定内容
    • 名前: cred_dockerhub
    • 組織: Default
    • 認証情報タイプ: Container Registry
    • Authentication URL: https://index.docker.io/v1/
    • ユーザ名: Docker Hubのユーザ名
    • Password or Token: Docker Hubのトークン

実行環境

先ほど作成したDocker Hubの認証情報を使用して、netbox.netbox Collectionが入っている専用の実行環境を使用可能にします。

  • 設定箇所
    • Automation Execution > Infrastructure > 実行環境
  • 設定内容
    • 名前: NetBox EE
    • イメージ: docker.io/ユーザー名/netbox-ee:tag
    • Pull: missing
    • 組織: Default
    • Registry credential: cred_dockerhub

インベントリー

ここが今回のポイントの2つ目です。AAPに「インベントリ」を作成し、その中で「どこから(Source)」「どの認証情報(Credential)を使って」「どの実行環境(EE)で」情報を取得するかを設定します。
inventory.ymlnetbox.netbox.nb_inventoryプラグインを指定しているため、
専用の実行環境(NetBox EE)を指定しないとエラーになってしまうので注意してください。

  • 設定箇所
    • Automation Execution > Infrastructure > インベントリー
  • 設定内容
    • 名前: inv_netbox
    • タイプ: インベントリー
    • 組織: Default
    • 「ソース」タブ(Inventory Source)
      • 名前: source_netbox
      • 実行環境: NetBox EE
      • ソース: Sourced from a Project
      • 認証情報: cred_netbox
      • プロジェクト: proj_netbox
      • Inventory file: inventory.yml
      • オプション
        • Overwrite: true
        • Overwrite variables: true

inventory_source.png

3. NetBoxからのインベントリ情報取得

作成したインベントリinv_netboxを開き、「ソース」タブにあるsource_netboxで[Launch inventory update]を選択します。
ジョブのステータスが「成功」になったら、同インベントリの「ホスト」タブを確認してみましょう。NetBoxに登録した4台のホストが取得できていれば成功です。

host_list.png

同様に、manufacturers_ciscoグループでも変数が取得できています。

group_cisco.png

さいごに

今回は、ansible-navigator編からさらに一歩進んで、Ansible Automation Platform上で
NetBoxを動的インベントリとして活用する方法をご紹介しました。
今回のような実装では、手動でのインベントリ管理は不要で、NetBoxに情報を登録すれば、それが自動的にAAPへ反映されるようになりました。
次のステップとして、このインベントリを使って、実際のネットワーク機器への設定変更や情報収集といった、より高度な自動化ワークフローを構築してみてはいかがでしょうか?
この記事が、あなたの組織でNetBoxの利用をさらに促進し、ネットワーク運用の自動化を加速させる一助となれば幸いです。

参考URL

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?