はじめに
以前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情報を取得する。
-
- bash:shell
-
- docker exec -it notebook /bin/bash
- jupyter-notebook –list
demoについて
※nwdiagもAnsible Kernelで動く
HTML(r'<iframe width="1024" height="560" src="http://localhost:8000/example/" frameborder="0" allowfullscreen></iframe>')
時間が作れたらpy_d3で直接inet-henge実行して、svgファイルで保存して参照する形にしてみます。