1. はじめに
NetOpsCoding AdventCalendar2016の18日目の記事です。
当方は某SIerにてお客様のネットワーク設計・構築したり、ネットワークの維持管理をしていたりします。
構築の際に作る資料としてExcelで書かれたパラメータシートなるものがあります。
よくあるのはこんな感じの設定項目ごとにパラメータが記載されている資料です。
このパラメータシートを基にネットワーク機器のコンフィグを作成、機器に設定します。
しかし数十~数百台のスイッチに設定を入れる場合、スイッチの設定をしつつ、
パラメータシートがちゃんと更新するというのは結構神経がすり減る作業です。
納品前のレビューで上司に「ここコンフィグとパラメータシートの値違うけど(またかよこいつ )」と指摘されないようにするには、パラメータシートからコンフィグを生成すればいいんじゃね?ということで今回の記事を書くことになりました1。
NetOpsCodingか?というのはありますが、ソフトウェアでのNW機器の設定効率化ってことで…。
なおすべてのパラメータに対してコンフィグが生成できるようにするようには間に合わなかったため、プログラムは未完成です2 。githubのレポジトリはこちらになります。
2. 使った道具
使った道具・環境は下記の通りです。
Software | Version |
---|---|
OS | Windows 10 |
Excel | Excel 2013 |
Python | 3.5.1 |
openpyxl | 2.4.1 |
jinja2 | 2.8 |
Excelファイルは下記のリンクのものを例として使います。
スイッチはCatalyst2960-8TC-L(IOS 15.0(2)SE8)を使っています。
コンフィグ生成はExcelのマクロだけでできなくはないのですが、最近読んでるpython本3にopenpyxlというpythonからexcelを操作するライブラリがあるというのを知ったので勉強がてら、使うことにしました。
将来的にはCatalyst以外の機器もサポートするため、テンプレートエンジンのjinja2を使って生成元となるデフォルトコンフィグを分けておきます。
3. 使い方
# python pyxl2nwcfg.py sample_conf.xlsx
でsample_conf.xlsxのxlsxファイルをsample_conf.txtの名前のコンフィグを生成します。
4. プログラムの構造
------ pyxl2nwcfg.py
+-- template ------ c2960-8tc-l.template.txt
| +-- etc
+-- lib ----------- gennwconf.py
+-- pyxl2catalystcfg.py
pyxl2nwcfg.pyでは下記のように処理します。
1.excelファイルの読み込み
2.lib配下にある利用するジェネレータの選出
3.コンフィグの出力
gennwconf.pyでは将来的に機種によって利用するコンフィグ生成器を分けます。
pyxl2catalystcfg.pyでは
1.templateファイルを読み込み
2.xlsxの内容を解析
3.templateエンジンにrenderし、文字列を返す
といった処理をします。
5. まとめ
書いてみて気づきましたが、めちゃくちゃ課題があります。
1.Excelの形式が崩れるとすべて書き直しになる。->スクレイピングしやすいようにExcelの設計が必要
2.新しい設計項目、機種に対応するにはどうするか
プログラム自体については引数チェックや例外処理を全然書いていないので、ブラッシュアップが必要です。
まだまだ育てていく必要がある感じなので、アドバイスあればお願いします4。