1. はじめに
前回の記事では、Network Sketcher本体とNetwork Sketcher Cisco Extensionを導入し、config_converter を使用するための準備を行いました。
今回は、Cisco Extensionに同梱されているサンプルコンフィグを使って、実際に config_converter を実行し、構成図作成までの一連の流れを検証します。
本記事の各スクリーンショット内で表示されている情報は、全てサンプルコンフィグに設定されている情報です。筆者の環境とは関係ありません。
2. 作業手順
今回の作業手順は以下のとおりです。
- 空のマスターファイルの作成
-
config_converterの実行 - 生成したコマンドをマスターファイルへ反映
- Device Fileの生成
- L1/L2/L3構成図の作成
- 実行結果の確認
3. 空のマスターファイルの作成
はじめに、config_converter で生成したコマンドを反映するための、空のマスターファイルを作成します。
本作業は、PowerPointのラフスケッチからマスターファイルを生成する場合は不要です。
config_converter を実行すると、マスターファイルへ反映するためのコマンドがテキストデータで生成されます。
反映先のマスターファイルが存在しないとコマンドを投入できないため、あらかじめ空のマスターファイルを作成しておきます。
まず、空のマスターファイルを保存するフォルダを作成します。
今回の環境では、次の位置にフォルダを作成しました。
Network Sketcher/
└─ work/
└─ sample_config_converter/
次に、Network Sketcherに用意されている export master_file_nodata コマンドを実行して、空のマスターファイルを作成します。
cd "(作業フォルダ)\Network Sketcher\network-sketcher\network-sketcher_offline"
python network_sketcher.py export master_file_nodata --master "..\..\work\sample_config_converter\"
--master [master file path] で指定したパスに、空のマスターファイル [MASTER]no_data.xlsx が作成されます。
ファイルパスでファイル名を指定しても無視され、必ず [MASTER]no_data.xlsx というファイル名で生成されます。生成後、必要に応じてリネームしてください。
ただし、ファイル名の先頭にある [MASTER] の部分は変更しないでください。
Network Sketcherは、この文字列でマスターファイルやデバイスファイルを判別しているようです。
4. config_converterの実行
次に、config_converter を実行します。
まず、Network Sketcher Cisco Extensionのフォルダへ移動します。
cd "(作業フォルダ)\Network Sketcher\network-sketcher-cisco-extension"
config_converterで使用するPythonパッケージは、config_converter/requirements.txtに記載されています。
前回の記事の追記のとおり、現在はciscoconfparseおよびciscoconfparse2を使用しない以下の修正版がリリースされています。
- Network Sketcher Ver. 3.1.2q
- Network Sketcher Cisco Extension v0.5.1a
本記事の検証時点では、必須パッケージとしてnetworkx、任意パッケージとしてciscoconfparse2が記載されていました。
今回の検証では、Network Sketcher導入時に必要なパッケージをインストール済みだったため、ここでは追加インストールを行っていません。
必要な場合は、取得したバージョンのrequirements.txtを確認したうえで、以下のコマンドを実行してください。
python -m pip install -r .\config_converter\requirements.txt
config_converter を実行し、Network Sketcher用のコマンドファイルを生成します。
元になるサンプルコンフィグは以下のフォルダに保存されてます。
config_converter/
└─ Input_data/
└─ sample1/
python -m config_converter.src.convert `
-i .\config_converter\Input_data\sample1\ `
-o .\config_converter\Output_data\ns_commands.txt
各オプションの意味は以下のとおりです。
-
-i
変換元のrunning-configが格納されているフォルダを指定します。 -
-o
生成するNetwork Sketcher用コマンドファイルの出力先を指定します。
実行が完了すると、以下のファイルが作成されます。
config_converter/
└─ Output_data/
└─ ns_commands.txt
ns_commands.txt には、Network SketcherのMasterへ反映するためのコマンドが出力されています。
5. マスターファイルへ反映
前章で生成した ns_commands.txt の内容を、空のマスターファイルへ反映します。
まず、Network Sketcherを起動します。
cd "(作業フォルダ)\Network Sketcher\network-sketcher\network-sketcher_offline"
python network_sketcher.py
Network Sketcherが起動したら、3章で作成した空のMasterファイルをメインパネルへドラッグします。
CLI画面が立ち上がるので、ns_commands.txt の内容をすべてコピーして貼り付け、「Execute CLI Commands」をクリックして貼り付けたコマンドを実行します。
しばらく待つと、コマンド実行結果の画面が表示されるので内容を確認します。
今回の検証結果では1つのコマンドがFailedになりました。
このコマンドについては後述します。
これで、config_converter で生成したコマンドのマスターファイルへの反映は完了です。
6. デバイスファイル、構成図の生成
コマンドを反映したマスターファイルから、デバイスファイルとL1/L2/L3構成図を生成します。
マスターファイルの反映が終わると、マスターパネル画面が立ち上がってきます。
- L1構成図の生成
マスターパネルのLayer1 Diagramの各ボタンをクリックするとL1構成図が生成されます。L1構成図は、物理結線の構成図になります。
- L2構成図の生成
マスターパネルのLayer2 Diagramのドロップダウンリストから生成したいエリア名を選んで、Per AreaボタンをクリックするとL2構成図が生成されます。L2構成図は、VLANやPortChannel等のLayer2レベルの接続構成図になります。
拡大するとこんな感じ
- L3構成図の生成
マスターパネルのLayer3 Diagramの各ボタンをクリックするとL3構成図が生成されます。L3構成図は、各ネットワークアドレスの接続構成図になります。
拡大するとこんな感じ
- デバイスファイルの生成
マスターパネルのExportからDevice fileをクリックするとデバイスファイルが生成されます。各デバイスのホスト名、ポート番号、VLAN番号、IPアドレス等の情報がまとまったファイルになります。また、今後のメンテナンスはマスターファイルではなく、デバイスファイルを修正していく形になります。
7. 実際に試してみた所感、結論
ここまで、config_converter を使ってサンプルコンフィグからNetwork Sketcher用のコマンドを生成し、Masterファイルへの反映、Device FileとL1/L2/L3構成図の作成までを試しました。
実際に使ってみた感触を整理すると以下のとおりです。
✅ 良かった点
- running-configから構成図のたたき台を簡単に生成できる
- L1/L2/L3構成図をまとめて生成できる(似たような構成図を複数作る必要がなくなる)
- デバイスファイルでIPアドレス、インターフェース、VLANなどの情報を一覧管理できる
⚠️ イマイチな点
- running-configだけでは物理配線や対向機器を正確に判断しきれない
- 環境によっては、大量のDummyオブジェクトが生成され、修正箇所が増える
- その場合、PowerPointのラフスケッチで一から作成した方が早い可能性も出てくる
config_converter を使ってみて、思ったより簡単に構成図を生成することができました。
一度マスターファイルが出来上がれば、L1/L2/L3構成図がワンクリックで生成されるので、従来、物理/論理構成図といった同じ様な構成図を複数作成しなければならない手間が大幅に短縮できると感じました。
また、構成図だけでなく、デバイスファイルについては、インターフェース、IPアドレス、VLAN、L2/L3情報などをExcel上で確認できるため、機器情報の管理ファイルとしても使えそうです。
一方で、現時点ではrunning-configの読み取り精度に課題もあると感じました。
running-configだけでは接続先がわからず、Network Sketcherが推測する形となり、結果Dummyオブジェクトが大量に生成されました。
接続やオブジェクトの修正をする場合、L1構成図を直接修正して読み込ませるという手法になるため、Dummyオブジェクトが多いとそれだけ修正の手間がかかり、場合によってはラフスケッチから作成する方が早い場合もありそうです。
今後、descriptionに設定している文字列から、接続先オブジェクトを自動認識できるようになることを期待しています。
結論
config_converter は「構成図を完全自動生成するツール」というより、構成図作成のたたき台を生成するツールとして考えるのがよさそうです。
参考:エラーコマンドの修復
今回の検証では、ns_commands.txt をMasterへ反映した際、1つのコマンドが Failed になりました。
コマンド実行結果画面では、成功したコマンドと失敗したコマンドが一覧で表示されます。
Failed になったコマンドがある場合は、対象行の内容を確認します。
生成した16コマンドのうち、13番目のコマンドでFailedになっていることが確認できます。
実行結果画面では、以下の警告が表示されました。
Warnings: 1 entry(ies) with errors
Entry 9: L3 interface not found: EDGE-XR01:Bundle-Ether 1
該当するコマンドは、EDGE-XR01 の Bundle-Ether 1 にIPアドレスを反映しようとしている部分です。
['EDGE-XR01','Bundle-Ether 1',['10.255.255.20/30']]
原因
Bundle-Etherは、IOS-XRにおけるPort-channel相当のLAGインターフェースです。
LAGインターフェースの作成時にはBundle-Ether 1がPort-channel 1へ変換されていましたが、IPアドレスの付与時にはBundle-Ether 1のままとなっており、インターフェース名が一致していませんでした。
config_converterの生成結果を確認すると、EDGE-XR01のLAGインターフェースは、先に実行されるadd portchannel_bulkコマンド(10番目のコマンド)によって、Network Sketcher上にPort-channel 1として作成されていました。
# Phase: 3 portchannel_bulk
add portchannel_bulk "[['EDGE-XR01',['GigabitEthernet 0/0/0/0','GigabitEthernet 0/0/0/1'],'Port-channel 1'],['Dummy_RT_6',['Dummy 2','Dummy 3'],'Port-channel 1']]"
一方、その後に実行されるadd ip_address_bulkコマンドでは、IPアドレスの設定先がIOS-XRのコンフィグ上の名称であるBundle-Ether 1のまま出力されていました。
['EDGE-XR01','Bundle-Ether 1',['10.255.255.20/30']]
つまり、Network Sketcher上にはPort-channel 1が作成されているにもかかわらず、IPアドレスを付与する処理ではBundle-Ether 1を参照していたため、対象のL3インターフェースを見つけることができず、エラーとなっていました。
対応
Port-channel 1のメンバーポートは、サンプルコンフィグのBundle-Ether 1に設定されているメンバーポートと一致していたため、両者は同じLAGインターフェースを表していると判断しました。
そこで、IPアドレスの設定先を、Network Sketcher上に存在しないBundle-Ether 1から、すでに作成されているPort-channel 1へ変更し、add ip_address_bulkコマンドを手動で実行しました。
デバイスファイルを編集、マスターファイルへ反映でも修正可能ですが、今回は手動コマンドでの反映を試してみたかったので、コマンドで修正しています。
コマンドを実行するとマスターファイルが上書きされるため、実行前にバックアップを取得することを推奨します。
修正コマンド
python network_sketcher.py add ip_address_bulk "[['EDGE-XR01','Port-channel 1','10.255.255.20/30']]" `
--master "..\..\work\sample_config_converter\[MASTER]no_data.xlsx"
IPアドレスの追加が一か所だけであれば、add ip_address_bulkではなくadd ip_addressコマンドで修正可能です。今回は失敗したコマンドの該当箇所のみを抜き出して実行したため、ip_address_bulkを使用しています。
参考URL
-
Network Sketcher
https://github.com/cisco-open/network-sketcher -
Network Sketcher Cisco Extension
https://github.com/CiscoDevNet/network-sketcher-cisco-extension -
config_converter
https://github.com/CiscoDevNet/network-sketcher-cisco-extension/tree/main/config_converter
ライセンス
本記事で利用しているNetwork SketcherおよびNetwork Sketcher Cisco Extensionは、Apache License 2.0で公開されています。
-
Network Sketcher License
https://github.com/cisco-open/network-sketcher/blob/main/LICENSE -
Network Sketcher Cisco Extension License
https://github.com/CiscoDevNet/network-sketcher-cisco-extension/blob/main/LICENSE













