はじめに
以前の記事(【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)に存在すること
- ansible-core: 2.15.13
- Python: 3.9.21
- netbox.netbox: 3.21.0
-
AAPとコード管理ツール(SCM, 例: Git)が連携済みであること
- AAPに作成済みのプロジェクトの名前は、
proj_netbox
とします - プロジェクトの連携先であるSCMリポジトリの名前は、
repo_netbox
とします
- AAPに作成済みのプロジェクトの名前は、
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は省略します。
-
group_vars
-
manufacturers_cisco.yml
-
manufacturers_juniper.yml
-
-
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.yml
でnetbox.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
3. NetBoxからのインベントリ情報取得
作成したインベントリinv_netbox
を開き、「ソース」タブにあるsource_netbox
で[Launch inventory update]を選択します。
ジョブのステータスが「成功」になったら、同インベントリの「ホスト」タブを確認してみましょう。NetBoxに登録した4台のホストが取得できていれば成功です。
同様に、manufacturers_cisco
グループでも変数が取得できています。
さいごに
今回は、ansible-navigator編からさらに一歩進んで、Ansible Automation Platform上で
NetBoxを動的インベントリとして活用する方法をご紹介しました。
今回のような実装では、手動でのインベントリ管理は不要で、NetBoxに情報を登録すれば、それが自動的にAAPへ反映されるようになりました。
次のステップとして、このインベントリを使って、実際のネットワーク機器への設定変更や情報収集といった、より高度な自動化ワークフローを構築してみてはいかがでしょうか?
この記事が、あなたの組織でNetBoxの利用をさらに促進し、ネットワーク運用の自動化を加速させる一助となれば幸いです。