0
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へのインターフェース作成 & IPアドレス割り当てを自動化したい

Last updated at Posted at 2025-07-29

はじめに

以前の記事(【AWS】Amazon EC2にNetBoxコンテナを構築したい)でAWS上にNetBoxのコンテナ環境を構築しました。今回はその環境を使い、AnsibleでNetBoxの設定変更を自動化してみます。
この記事では、NetBoxに登録済みのデバイスに対して、「インターフェース作成 → プレフィックス作成 → IPアドレス割り当て」という一連の作業を1つのPlaybookで自動化する手順を解説します。

TL;DR

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

  • Ansible Playbook一つで、NetBoxのデバイスに対するインターフェース作成からIPアドレス割り当てまでを一括実行する
  • netbox.netboxコレクションの基本的な使い方を理解する
  • varsloopを使った、効率的なPlaybookの書き方を学ぶ

前提条件

  • NetBoxで以下が作成済みであること
    • APIトークン: NetBoxへのAPIアクセスに必要です
    • デバイス: 今回は、Router-test という名前のデバイスが既に登録されていることを想定します

実行環境

  • NetBox: v4.2.8
  • Ansible実行環境

詳細

1. 実行するPlaybook

作成したPlaybookは以下の通りです。varsセクションでNetBoxの接続情報や作成したいオブジェクトの情報を変数として定義し、tasksセクションでそれらの変数を使いながら処理を実行しています。

  • 各タスクの処理内容
    1. Create device interfaces: varsで定義した情報に基づき、デバイスにインターフェースを作成します
    2. Create prefixes: IPアドレスを管理するためのプレフィックスを作成します
    3. Assign IP addresses to interfaces: 作成したインターフェースにIPアドレスを割り当てます
---
- 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が正しく割り当てられました。

netbox_ansible_result.png

さいごに

今回は、Ansibleを使ってNetBoxのインターフェース作成からIPアドレス割り当てまでを自動化しました。
netbox.netboxコレクションは、各モジュールでdataキー配下にパラメータを記述する構成に
統一されているため、非常に直感的で扱いやすいと感じました。
手作業での繰り返し作業を自動化することで、作業効率の向上はもちろん、ヒューマンエラーの防止にも繋がります。ぜひ活用してみてください!

参考URL

0
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
0
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?