textfsm で利用するテンプレートを Python スクリプトに含める
以前に IOS-XE の show ip route を textfsm で解析する というメモを書きました。 このメモでは TextFSM で利用するテンプレートを外部ファイルとして保存していました。 テンプレートを外部ファイルでは無く、Python スクリプトに同梱してしまうサンプルスクリプトをメモしておきます。
検証環境¶
対象 | バージョン |
---|---|
macOS | 14.5 |
Python | 3.11.9 |
textfsm | 1.1.3 |
textfsm のインストール¶
textfsm を pip でインストールします。 今回は uv を利用しています。
uv pip install textfsm
サンプルスクリプト¶
「IOS-XE で実行した show ip route
の結果を TextFSM で解析する」サンプルスクリプトは以下の通りです。 テンプレートは過去メモと同じく ntc_templates/templates/cisco_ios_show_ip_route.textfsm を使いますが、7 行目からヒアドキュメントでテンプレートを文字列として格納しています。 この際、7 行目の Value Filldown VRF (\S+)
を改行して 8 行目から記載してしまうと TexstFSM のエラーになってしまう為、ヒアドキュメントの開始文字である """
に続けて定義します。 91 行目では StringIO を使ってテンプレートの文字列をテキストストリームとして読み込みます。
sample.py | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
|
実行結果¶
このサンプルスクリプトの実行結果は以下の通りです。
$ ./sample.py
['VRF', 'PROTOCOL', 'TYPE', 'NETWORK', 'PREFIX_LENGTH', 'DISTANCE', 'METRIC', 'NEXTHOP_IP', 'NEXTHOP_VRF', 'NEXTHOP_IF', 'UPTIME', 'FLAG']
[['', 'C', '', '10.0.12.0', '24', '', '', '', '', 'Ethernet0/2', '', ''], ['', 'L', '', '10.0.12.1', '32', '', '', '', '', 'Ethernet0/2', '', ''], ['', 'D', '', '10.0.23.0', '24', '90', '307200', '10.0.12.2', '', 'Ethernet0/2', '00:42:44', ''], ['', 'D', '', '10.0.34.0', '24', '90', '332800', '10.0.12.2', '', 'Ethernet0/2', '00:42:34', ''], ['', 'D', '', '10.0.45.0', '24', '90', '358400', '10.0.12.2', '', 'Ethernet0/2', '00:42:34', '']]