はじめに
以前の記事(【AWS】Amazon EC2にNetBoxコンテナを構築したい)でAWS上にNetBoxのコンテナ環境を構築しました。今回はその環境を使い、AnsibleでNetBoxの設定変更を自動化してみます。
この記事では、NetBoxに登録済みのデバイスに対して、「インターフェース作成 → プレフィックス作成 → IPアドレス割り当て」という一連の作業を1つのPlaybookで自動化する手順を解説します。
TL;DR
この記事を読めば、以下のことができるようになります
- Ansible Playbook一つで、NetBoxのデバイスに対するインターフェース作成からIPアドレス割り当てまでを一括実行する
- netbox.netboxコレクションの基本的な使い方を理解する
-
vars
とloop
を使った、効率的なPlaybookの書き方を学ぶ
前提条件
- NetBoxで以下が作成済みであること
- APIトークン: NetBoxへのAPIアクセスに必要です
-
デバイス: 今回は、
Router-test
という名前のデバイスが既に登録されていることを想定します
実行環境
- NetBox: v4.2.8
- Ansible実行環境
- ansible-core: 2.15.13
- Python: 3.9.21
- netbox.netbox: 3.21.0
詳細
1. 実行するPlaybook
作成したPlaybookは以下の通りです。vars
セクションでNetBoxの接続情報や作成したいオブジェクトの情報を変数として定義し、tasks
セクションでそれらの変数を使いながら処理を実行しています。
- 各タスクの処理内容
-
Create device interfaces:
vars
で定義した情報に基づき、デバイスにインターフェースを作成します - Create prefixes: IPアドレスを管理するためのプレフィックスを作成します
- Assign IP addresses to interfaces: 作成したインターフェースにIPアドレスを割り当てます
-
Create device interfaces:
---
- name: NetBox ansible demo
hosts: localhost
gather_facts: false
vars:
ansible_python_interpreter: /usr/bin/python3
netbox_setting:
netbox_url: http://XXX.XXX.XXX.XXX:8000
netbox_token: token # APIトークンをここに記載
interfaces:
- device: Router-test
interface: port-01
type: 1000Base-T (1GE)
- device: Router-test
interface: port-02
type: 1000Base-T (1GE)
prefix:
- 192.168.0.0/24
- 192.168.1.0/24
ip_address:
- address: 192.168.0.1/24
assigned_object:
device: Router-test
name: port-01
- address: 192.168.1.1/24
assigned_object:
device: Router-test
name: port-02
tasks:
- name: Create device interfaces
netbox.netbox.netbox_device_interface:
netbox_url: "{{ netbox_setting.netbox_url }}"
netbox_token: "{{ netbox_setting.netbox_token }}"
validate_certs: false
data:
device: "{{ item.device }}"
name: "{{ item.interface }}"
type : "{{ item.type }}"
state: present
loop: "{{ netbox_setting.interfaces }}"
- name: Create prefixes
netbox.netbox.netbox_prefix:
netbox_url: "{{ netbox_setting.netbox_url }}"
netbox_token: "{{ netbox_setting.netbox_token }}"
validate_certs: false
data:
prefix: "{{ item }}"
state: present
loop: "{{ netbox_setting.prefix }}"
- name: Assign IP addresses to interfaces
netbox.netbox.netbox_ip_address:
netbox_url: "{{ netbox_setting.netbox_url }}"
netbox_token: "{{ netbox_setting.netbox_token }}"
validate_certs: false
data:
address: "{{ item.address }}"
assigned_object:
device: "{{ item.assigned_object.device }}"
name: "{{ item.assigned_object.name }}"
state: present
loop: "{{ netbox_setting.ip_address }}"
2. 実行結果
このPlaybookを実行すると、NetBox上で以下のようにオブジェクトが作成されていることが確認できます。
Router-test
デバイスにport-01
が作成され、IPアドレス192.168.0.1/24
が正しく割り当てられました。
さいごに
今回は、Ansibleを使ってNetBoxのインターフェース作成からIPアドレス割り当てまでを自動化しました。
netbox.netboxコレクションは、各モジュールでdataキー配下にパラメータを記述する構成に
統一されているため、非常に直感的で扱いやすいと感じました。
手作業での繰り返し作業を自動化することで、作業効率の向上はもちろん、ヒューマンエラーの防止にも繋がります。ぜひ活用してみてください!