ルータのコマンド実行結果をCSVに変換してみた by TextFSM

1bcde780729a8dd1eeed0a3bb708c5b7?s=47 kooshin
December 13, 2017

ルータのコマンド実行結果をCSVに変換してみた by TextFSM

ネットワークプグラマビリティ勉強会#14で発表したスライドです。
https://network-programmability.connpass.com/event/72965/

1bcde780729a8dd1eeed0a3bb708c5b7?s=128

kooshin

December 13, 2017
Tweet

Transcript

  1. ルータのコマンド実行結果を CSVに変換してみた by TextFSM 2017年12月13日 ネットワークプログラマビリティ勉強会 #14 @kooshin 岩田 浩真

  2. 自己紹介 @kooshin(コーシン) • 仕事 ネットワークの運用 • 趣味 おもしろネタの実装 • 発表

    • 2016/3/1 - npstudy#8 ブラウザからルータを操作してみた • 2017/4/21 - npstudy#12 タブレットPCでルータを設定してみた with 二次元バーコードリーダ • 2016/6/27 - NetOpsCoding#3 多数のルータへのログインを捗らせてみた 2
  3. https://twitter.com/kooshin/status/900923276049891328

  4. 趣味の成果 #逸般の誤家庭 にある シスコルータで試してみてください 4 # ping pong.kooshin.net repeat 1400

    ITmedia NEWS pingを打つと「にゃーん」を返すサービス、ネットワークエンジニアが開発 IPv4とIPv6の両方に対応。 http://www.itmedia.co.jp/news/articles/1709/07/news106.html
  5. 今日の伝えたいこと ネットワークエンジニアの皆さん コードを書いて、楽をしましょう

  6. 今日の発表 • ネットワークエンジニアのよくある作業を 自動化ネタの発表です。 • 簡単なコードを書くことで、退屈な作業から 解放され、楽になります。 • 最近、ネットワーク自動化のノウハウが多く、 簡単に取り組むことができます。

    6
  7. 今日の発表 下記を組み合わせて楽をしてみました • Python プログラミング言語 • TextFSM Pythonのライブラリ • NTC-Templates

    TextFSM用のテンプレート集 • Excel SEの必須ツール 7
  8. なぜやるか 面倒だから楽をしたい

  9. よくある作業 ネットワークエンジニアのよくある作業 • 機器の型名とシリアル番号の収集 資産管理や保守登録時に必要な作業 • 経路情報の収集 正しく経路が広報されているかチェックが必要 • 他にもいろいろ面倒なことが…

    9
  10. 地道で面倒な作業 ネットワークエンジニアは面倒な作業が多い • Telnet/SSHして、CLIでログインして、 コマンド実行結果の特定部分をコピーして、 Excelにペーストする作業が多い • 台数が多いと非常に面倒 10

  11. 独自実装でがんばった 1から実装すると、非常に大変 • コマンド実行結果を正規表現で抽出する場合、 正規表現の作成に非常に時間がかかる 11

  12. ネットワークエンジニアの救世主 TextFSM + NTC-Templates

  13. これはなにか コマンド実行結果の抽出ライブラリ • TextFSM ネットワーク機器のコマンド実行結果を 解析するPythonライブラリ https://github.com/google/textfsm • NTC-Templates TextFSM用のテンプレート集

    Arista/Brocade/Cisco/Juniperなどに対応 https://github.com/networktocode/ntc-templates 13
  14. TextFSM + NTC-Templates NTC-TemplatesはOSSで公開 • Cisco IOSは39種類のコマンドテンプレート • cisco_ios_show_inventory.template 14

    Value NAME (.*) Value DESCR (.*) Value PID (([¥S+]+|.*)) Value VID (.*) Value SN ([¥w+¥d+]+) Start ^NAME:¥s+"${NAME}",¥s+DESCR:¥s+"${DESCR}" ^PID:¥s+${PID}.*,.*VID:¥s+${VID},.*SN:¥s+${SN} -> Record ^PID:¥s+,.*VID:¥s+${VID},.*SN: -> Record ^PID:¥s+${PID}.*,.*VID:¥s+${VID},.*SN: -> Record ^PID:¥s+,.*VID:¥s+${VID},.*SN:¥s+${SN} -> Record ^PID:¥s+${PID}.*,.*VID:¥s+${VID}.* ^PID:¥s+,.*VID:¥s+${VID}.* ^.*SN:¥s+${SN} -> Record ^.*SN: -> Record 値の定義 ルールとアクションの定義
  15. 例 ログから型名とシリアル番号を 抽出してExcel(CSV)に保存

  16. やりたいこと 型名とシリアル番号をExcelにまとめたい • show inventoryコマンドの実行結果 • CSVで出力 16

  17. 仕組み 17 コマンド 実行結果 CSVファイル TextFSM テンプレート Python コード 14行

  18. 簡単なスクリプト Pythonコード 14行 型名とシリアル番号をCSVに出力 18 コマンド実行結果読み込み TextFSMで解析し抽出 NTC-Templates使用 CSV形式で保存

  19. 動作結果 19 show inventory inventory.csv cisco_ios_show_inventory .template Python コード 14行

  20. デモ#1 - Jupyter Notebook 20

  21. さらにもう1歩 TextFSM + NTC Templates + netmiko

  22. 自動化へ 取得する部分も自動化 • Netmiko ネットワーク機器にTelnet/SSHで ログインするPythonライブラリ https://github.com/ktbyers/netmik 22

  23. 仕組み 23 ホスト一覧 CSVファイル CSVファイル TextFSM テンプレート Python コード 60行

    ルータ Telnet/SSH
  24. デモ#2 - Jupyter Notebook 24

  25. 今日の伝えたかったこと ネットワークエンジニアの皆さん コードを書いて、楽をしましょう

  26. ブログ見てね はてなブログでまとめました • TextFSMでシスコルータの型名とシリアルを抽出する方法 http://kooshin.hateblo.jp/entry/2017/11/28/000800 • Pythonでシスコルータの型名とシリアル番号の収集を自動化してみた http://kooshin.hateblo.jp/entry/2017/12/06/223407 26