Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

自己紹介 @kooshin(コーシン) • 仕事 ネットワークの運用 • 趣味 おもしろネタの実装 • 発表 • 2016/3/1 - npstudy#8 ブラウザからルータを操作してみた • 2017/4/21 - npstudy#12 タブレットPCでルータを設定してみた with 二次元バーコードリーダ • 2016/6/27 - NetOpsCoding#3 多数のルータへのログインを捗らせてみた 2

Slide 3

Slide 3 text

https://twitter.com/kooshin/status/900923276049891328

Slide 4

Slide 4 text

趣味の成果 #逸般の誤家庭 にある シスコルータで試してみてください 4 # ping pong.kooshin.net repeat 1400 ITmedia NEWS pingを打つと「にゃーん」を返すサービス、ネットワークエンジニアが開発 IPv4とIPv6の両方に対応。 http://www.itmedia.co.jp/news/articles/1709/07/news106.html

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

今日の発表 下記を組み合わせて楽をしてみました • Python プログラミング言語 • TextFSM Pythonのライブラリ • NTC-Templates TextFSM用のテンプレート集 • Excel SEの必須ツール 7

Slide 8

Slide 8 text

なぜやるか 面倒だから楽をしたい

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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 値の定義 ルールとアクションの定義

Slide 15

Slide 15 text

例 ログから型名とシリアル番号を 抽出してExcel(CSV)に保存

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

デモ#1 - Jupyter Notebook 20

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

デモ#2 - Jupyter Notebook 24

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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