はじめに
前回の記事にて、
最新のJupyter notebook上でPythonのNWトポロジー図描画ライブラリであるnwdiagを動作させる記事を書きました。https://qiita.com/t-tkgh/items/16ee383f8aa11d2fcfe9
その時にAnsibleのfilter pluginでnwdiagのテンプレート形式に出力できる様になると、
より便利になるなと思い立ちまして、今回AnsibleのPluginを独自に作ってJupyter Notebook上で動作させるデモを作りました。(現状はIPv4のみ対応です…)
思ったよりもシンプルに出来たので、今回の記事にします。
使い方
動作環境
Ansible 2.5.0
Python 3.6
1. nwdiagのAnsible Filter Pluginを配置する
・git cloneする
独自に作成したnwdiagのansible filter pluginsをgit cloneします
git clone https://github.com/t-tkgh/nwdiag_filter.git
・ansible.cfgの変更
(/etc/ansible/ansible.cfg or 実行ディレクトリ/ansible.cfgでも可能)
filter_plugins = <git cloneしたディレクトリパス>/nwdiag_filter
の項目を追記する。
2. NWトポロジー図の情報を定義する
・nwdiag_filterのNWトポロジー情報の定義規則
-
data[node]:
この配下にNW機器の各インターフェイス情報を格納する
以下、各インターフェイスの情報の項目となる。- name : NW機器名を定義する
- ifname : NW機器の対象のインターフェイスの名称を定義する
- address : NW機器の対象のインターフェイスのIPv4アドレスを定義する
- vrf : 対象のインターフェイスが所属するvrf名を定義する(任意)
- vlan : 対象のインターフェイスのvlan idを定義する(任意)
-
data[network]:
この配下にネットワークアドレスの名称とサブネットを定義した情報を格納する- name : ネットワークアドレスの名称を定義する(任意)
- address : ネットワークアドレスを定義する※マスク値は二桁で(任意)
-
data[defaultmask] :二桁のマスク値
ここでは自動生成するネットワークアドレスのマスク値を定義する。(二桁で)
data[network]で定義されてないが、data[node]のaddressに存在するネットワークアドレスを
data[node]のaddressとここで定義されるマスク値から自動生成する
定義例
今回はyamlファイル形式のextra-varsでNWトポロジー図の作図情報を定義する。
data:
node:
- ifname: ge-0/0/0
vlan: 1000
name: router01
address: 192.168.0.1
vrf: vrf01
- ifname: ge-0/0/1
vlan: 2000
name: router01
address: 192.168.1.10
vrf: vrf01
- ifname: ge-0/0/1
vlan: '1000'
name: router02
address: 192.168.0.2
vrf: vrf02
- ifname: ge-0/0/1
vlan: '2000'
name: router02
address: 192.168.2.2
vrf: vrf02
- ifname: "gigabitethernet 0/1"
name: cpe01
address: 192.168.1.11
- ifname: "gigabitethernet 0/1"
name: cpe02
address: 192.168.2.1
network:
- name: test
address: "192.168.0.0/24"
defaultmask: 29
この例で作図されるトポロジー図は以下となる。
test以外のネットワークアドレスがdefaultmaskで指定された値の/29で自動生成されています。
3. Playbookを作成する
・extra-vars.ymlのデータをnwdiag_filterで変換する
- hosts: all
gather_facts: no
connection: local
tasks:
- debug:
msg: "{{ data | nwdiag_filter }}"
connectionはlocalを指定、dataはextra-varsにて定義された情報がansible.cfgで参照されるnwdiag_filterにてnwdiag形式の情報に変換されて出力される。
デモ
デモを実行したJupyter Notebookにて、デモ内容を記載。
https://github.com/t-tkgh/nwdiag_filter/blob/master/Demo.ipynb
デモを行う前の前提
・Jupyter Notebookでnwdiagを実行する環境は前回記事を参考に構築。
https://qiita.com/t-tkgh/items/16ee383f8aa11d2fcfe9
・Jupyter Notebookのコンテナ内でansibleをインストールしてあること。
pip install ansible
デモのポイント
- In [3]でansible.cfgでansible-playbookの出力結果をjson形式にしている。
- In [7]でansible-playbookをshellとして実行して、その結果を格納。
- In [8]でget_ipython().run_cell_magicを使うことで、nwdiagモジュールへ
ansible-playbookで生成したnwdiagのテンプレート情報をInputさせている。