はじめに
以前nwdiagをJupyter Notebookに表示させる記事を書きましたが、
nwdiag × Ansible plugin × Jupyter でNWトポ図の生成
NW自動化で自動構成図生成を進めるにつれてL3のNWトポロジー図だけでは表現できないユースケース(BGPトポロジなど)があり、
そこでinet-hengeを使ってBGPトポロジを表現して補完するようにしてみました。
また、Jupyter NotebookのAnsible Kernel上で実行することで、
NWトポロジー図の作図した構成情報を流用して、NW機器への設定投入自動化も可能にしました。
Inet-hengeについて
Nwdiagとは違い、InteropのShowNetのトポロジー図のようなノード間の繋がりの表現に特化したトポロジーが描けるjsライブラリです。
https://github.com/codeout/inet-henge
git cloneして、pythonなどで簡易httpサーバを立てるとexampleのトポロジー図が確認できます。
Jupyter Notebook(Ansible Kernel)について
Juputer Notebookは通常はPythonかShellでの対話式プログラム実行となりますが、
Jupyter Notebook(Ansible Kernel)は
ansibleのPlaybookにおけるtaskごとに対話式に実行できるようになっています。
詳しい使い方は公式のgithubページを参照ください。
https://github.com/ansible/ansible-jupyter-kernel
Dockerfile
Inet-henge + nwdiag(おまけ)をJupyter Notebook(Ansible kernel)のコンテナ上に構築するDockerfileは以下になります。
残念ながら、配布されているDockerImangeはまだPython2.7でしか提供されていないようです。
FROM benthomasson/ansible-jupyter-kernel
USER root
RUN yum install -y git ansible
RUN pip install nwdiag runipy textfsm jmespath
RUN git clone https://gist.github.com/a8e8269d4331b6b93e7ef90744fe0b3b.git
RUN git clone https://github.com/t-tkgh/nwdiag_filter.git
USER notebook
RUN git clone https://github.com/codeout/inet-henge.git
Dockerの構築
- 作成したDockerfileのディレクトリ上でビルドします。
docker build ./ -t jupyter-inet
- ビルドしたDockerImageをデプロイします。
※ホスト側のポートが重複する場合は任意のポート番号にそれぞれ置き換えてください。
例:-p 18000:8000など
docker run -idt --name notebook -p 8888:8888 -p 8000:8000 jupyter-inet
- 作成したDockerインスタンスへログインして、jupyter notebookのtoken情報を取得する。
docker exec -it notebook /bin/bash
jupyter-notebook --list
demoについて
※nwdiagもAnsible Kernelで動く
-
inet-hengeを表示するJupyter Notebookのデモを公開しています。
以下のgistのipynbをJupyter Notebook上にUploadして実行してください。
https://gist.github.com/t-tkgh/cd777a3423f995295b6ca49858b2e83c
以下のような図が生成されます。 -
コンテナデプロイ時に-p 8000:8000からホストのポートを変更している場合は、
In [9]: の以下のlocalhost:8000の部分を変更したポート番号へ変更してください。
HTML(r'<iframe width="1024" height="560" src="http://localhost:8000/example/" frameborder="0" allowfullscreen></iframe>')
時間が作れたらpy_d3で直接inet-henge実行して、svgファイルで保存して参照する形にしてみます。