【要約】PythonとNetmikoでshow ip routeを構造化してCSV保存する [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
ネットワークエンジニアが、多数の機器から特定の経路情報を取得しようとする際、テキストベースの出力に直面する。人間が読むための出力形式は、プログラムによる精密な処理には適していない。具体的には以下の課題がある。
- ・OSPF経路のみを抽出するなどの、特定の条件によるフィルタリングが困難。
- ・作業前後の経路情報を比較する際、目視による確認では漏れやミスが発生しやすい。
- ・機器のOSやコマンドごとに異なる出力形式に対し、個別に正規表現を書くのは保守性が低い。
// Approach
ネットワーク機器の出力をプログラムで扱いやすくするため、TextFSMを用いた構造化アプローチを採用する。既存のテンプレートを活用することで、開発コストを抑えつつ高度なパースを実現する。具体的な手順は以下の通りである。
- ・Netmikoのsend_command()にて、use_textfsm=Trueを指定する。
- ・NTC Templatesに含まれるcisco_ios_show_ip_routeテンプレートを利用する。
- ・パース結果をPythonのリストや辞書形式として取得する。
- ・必要なフィールド(network, nexthop_ip等)のみを抽出し、CSV形式で保存する。
// Result
構造化データの取得により、エンジニアはデータの加工や比較といった付加価値の高い作業に集中できる。手作業による確認コストを大幅に削減し、運用の正確性を向上させる成果が得られる。具体的な改善点は以下の通りである。
- ・OSPF経路などの特定プロトコルを、条件式を用いて瞬時に抽出可能。
- ・CSV出力により、Excelやスプレッドシートを用いた作業前後の差分比較が容易になる。
- ・raise_parsing_error=Trueの活用により、パース失敗を早期に検知できる。
Senior Engineer Insight
> 自作の正規表現を避け、NTC Templatesを利用する判断は、開発コストと保守性の観点から極めて合理的である。ただし、テンプレートの更新遅延や、OSのマイナーアップデートによる出力形式の変化が、自動化パイプラインを破壊するリスクを孕む。実戦投入時には、raise_parsing_error=Trueによる厳格なエラーハンドリングと、テンプレートのバージョン管理をセットで検討すべきである。単なるログ保存から、データ駆動型の運用へ移行するための極めて重要なステップと言える。