Pythonのnwdiagモジュールでネットワーク図を作成する

情報技術において、ソースコードはもちろん図・表などを用いることで効率よく相手に伝えることができます。今回はPythonのモジュールであるnwdiagを使い簡単にネットワーク図を作成します。Cisco資格の為、構築したネットワーク環境などをスクリプトで画像を自動生成できたら便利だな・・・なんて思っているのですが、どうでしょうか。とりあえずインストールに苦労したのでメモしておきます。躓くポイントは1カ所のみです。

ついでなので別のモジュールも加えておきましょう。
■ blockdiag (ブロック図を作成)
■ seqdiag (シーケンス図を作成)
■ actdiag (アクティビティ図を作成)
■ nwdiag (ネットワーク図を作成)

環境


Mac OS X Lion 10.7.2

インストール方法


※not support Python 3.x
$ sudo port install python27
Freetypeはpilより先にインストールする必要がある
$ sudo port install freetype libpng jpeg
Pythonのパッケージ管理システムpipをeasy_installでインストール
$ sudo easy_install pip
※画像ライブラリ
$ sudo pip install pil
※今回使用するモジュール類
$ sudo pip install nwdiag blockdiag seqdiag actdiag
Ciscoアイコンを使用するためのパッケージ
$ sudo pip install blockdiagcontrib-cisco
※PDFで出力するためのパッケージ 使わない場合は不要
$ sudo pip install reportlab
Freetype2よりも先にPILをインストールするとエラーを吐く
$ nwdiag test.diag
ERROR: The _imagingft C module is not installed
PILインストール時、ターミナルに表示されるSETUP SUMMARYを調べ、
【FREETYPE2 support available】と利用可能となっていることを確認


実行方法


※test.pngが生成される
$ nwdiag test.diag
※test.jpgが生成される フォント:Osaka.ttf アンチエイリアス:有効
$ nwdiag --font=/Library/Fonts/Osaka.ttf --antialias test.diag -o test.jpg
※test.pdfが生成される フォント:Osaka.ttf アンチエイリアス:有効
$ nwdiag --font=/Library/Fonts/Osaka.ttf --antialias test.diag -T pdf -o test.pdf


コードを書いてみる


今回はhttp://blockdiag.com/en/nwdiag/nwdiag-examples.html#simple-diagramのgrouping nodesを借り、一部をciscoアイコンを用いたルータに変更する。
test.diag

diagram {
network Sample_front {
address = "192.168.10.0/24";

// define group
group web {
web01 [address = ".1"];
web02 [address = ".2"];
}
}
network Sample_back {
address = "192.168.20.0/24";
web01 [address = ".1"];
web02 [address = ".2"];
db01 [address = ".101"];
router01 [address = ".102", shape="cisco.router"];
}
}

結果