ちゃんおぎのメモ置き場

ネットワークに強くなるために少しづつ頑張るブログです.

Netbox DockerでNetbox Pluginを動かしてみる

1. はじめに

NetBox v2.8でPlugin機能[1]が追加されました。 NetBox Pluginは既存の機能に拡張機能を簡単に追加できるようにしたものです。 また、拡張機能の開発が簡単になりました。

今回はPluginをNetBox Docker[2]にInstallしてみた時のメモを書いておこうと思います。
install方法は公式のWiki[3]を参照しただけなので、そちらを参照したほうがわかりやすいかもしれません。

2. 概要

このセクションではNetbox DockerへPluginがInstallされるまでの大まかな原理について説明します。 PluginのInstallがどのように行われているかについて興味がない人は3. PluginのInstallセクションまで飛ばしてください。

まずInstallする前のNetbox Dockerのコンテナ構成を見てみます。

$ docker-compose ps 
            Name                           Command               State                           Ports
-------------------------------------------------------------------------------------------------------------------------------
netbox-docker_netbox-worker_1   python3 /opt/netbox/netbox ...   Up
netbox-docker_netbox_1          /opt/netbox/docker-entrypo ...   Up
netbox-docker_nginx_1           nginx -c /etc/netbox-nginx ...   Up      80/tcp, 0.0.0.0:8000->8080/tcp,0.0.0.0:32773->8080/tcp
netbox-docker_postgres_1        docker-entrypoint.sh postgres    Up      5432/tcp
netbox-docker_redis-cache_1     docker-entrypoint.sh sh -c ...   Up      6379/tcp
netbox-docker_redis_1           docker-entrypoint.sh sh -c ...   Up      6379/tcp

Netbox DockerはNginx, PostgreSQL, Redis, NetBoxApp(Django App)が動作しています。 詳細なApplication Stackはドキュメント[4]を参照してください。

今回、重要になってくるコンテナはNetBoxApp(Django App)であるnetbox-docker_netbox1netbox-docker_netbox-worker_1になります。 この2つのコンテナにPluginをInstallすることによって、Pluginが動作するようになります。

PluginをInstallする方法として、2つのコンテナに直接PluginをInstallする方法があります。しかし、この方法は2つのコンテナを直接変更する必要があるためあまりスマートではありません。 またNetboxのバージョンをUpdateするときなどに管理が大変になります。

そのため公式Wikiで紹介されている方法はPlugin用のコンテナを新たに作成し、まずそこへPluginをInstallします。 Pluginはrequirements.txtを利用してpipでinstallします。 その後docker-composeのoverride機能[5]を使用して、netbox-docker_netbox1netbox-docker_netbox-worker_1にPluginをInstallしたコンテナをOverrideします。

3. PluginのInstall

このセクションでは実際にPluginをInstallする方法について説明します。
今回はNetBox Onboarding plugin[6]をInstallしたいと思います。

3.1 Requirements

Netbox DockerでPluginをInstallするには4つのファイルを作成または変更する必要があります。
新たに作成するファイルは以下の3つになります。

  • plugin_requirements.txt
  • Dockerfile-Plugins
  • docker-compose.override.yml

また、変更が必要なファイルは以下になります。

  • configuraiton.py

3.2 Install

まずNetbox DockerをGithubからCloneしてきます。

$ git clone https://github.com/netbox-community/netbox-docker.git && cd $(basename $_ .git)

3.1で説明した3つのファイルを作成します。

$ touch plugin_requirements.txt Dockerfile-Plugins docker-compose.override.yml

plugin_requirements.txtにinstallしたいplugin名を記載します。

ntc-netbox-plugin-onboarding

Dockerfile-Pluginsに以下の内容を記載します。

FROM netboxcommunity/netbox:latest

copy ./plugin_requirements.txt /
RUN pip install  --no-warn-script-location -r /plugin_requirements.txt

docker-compose.override.ymlに以下の内容を記載します。

version: '3.4'
services:
  nginx:
    ports:
      - 8000:8080
  netbox:
    build:
      context: .
      dockerfile: Dockerfile-Plugins
    image: netbox:latest-plugins
  netbox-worker:
    image: netbox:latest-plugins

configuraiton.pyの一番に下にinstallしたいPlugin名とPluginのConfig(今回は書いてない)を以下のように記載します。

PLUGINS = ["netbox_onboarding"]

# PLUGINS_CONFIG = {
#   "netbox_onboarding": {
#     ADD YOUR SETTINGS HERE
#   }
# }

コンテナをBuildして、Deployします。

$ docker-compose build --no-cache
$ docker-compose up -d

http://localhost:8000/plugins/onboarding/にアクセスして以下のような画面が表示されると、Installは成功です。

f:id:tyanogi:20200723124426p:plain Pluginの使い方やConfigはドキュメントを参照してください。

4. まとめ

NetBox v2.8で追加されたPluginをNetBox Dockerで使用してみました。 現在、リリースされているPlugin[7]はまだ少ないですが今後増えていくことに期待したいですね。

次回はNetBox Pluginの開発方法について書きたいと思います。

5. 参考

[1] NetBox v2.8 Release Notes : https://netbox.readthedocs.io/en/stable/release-notes/version-2.8/
[2] NetBox Docker : https://github.com/netbox-community/netbox-docker
[3] Using Netbox Plugins : https://github.com/netbox-community/netbox-docker/wiki/Using-Netbox-Plugins
[4] Application Stack : https://netbox.readthedocs.io/en/stable/
[5] docker-compose.override.yml : https://docs.docker.jp/compose/extends.html#id12
[6] NetBox Onboarding plugin : https://github.com/networktocode/ntc-netbox-plugin-onboarding
[7] Plugin List : https://github.com/topics/netbox-plugin