非構造化出力を解析するためのJunos PyEZ操作テーブルの定義
概要 CLIまたはvtyコマンドの出力からデータを選択し、Junosデバイスから運用情報を抽出するカスタムテーブルを作成します。
Junos PyEZオペレーショナル(op) 非構造化出力のテーブルは、Junosデバイスで実行されたCLIコマンド、または特定のFPC(フレキシブルPICコンセントレータ)で実行されたvtyコマンドのテキスト出力からデータを抽出します。抽出されたデータは JSON に変換されます。これにより、デバイスの動作状態情報をすばやく取得して分析できます。Junos PyEZ op 非構造化出力用のテーブルは、XML などの構造化形式では返されないコマンド出力を解析する必要がある場合に特に便利です。
このトピックでは、Table のさまざまなコンポーネントについて説明します。
非構造化出力を解析するためのopテーブルのパラメータの概要
Junos PyEZ テーブルは YAML を使用してフォーマットされます。Op テーブル定義には、 表 1 に要約されている必須パラメーターとオプション・パラメーターをいくつか含めることができます。
テーブル パラメーター名 |
テーブル パラメーター |
説明 |
|---|---|---|
テーブル名 |
– |
テーブルのユーザー定義識別子。 |
コマンド |
|
CLI または vty コマンドを実行します。 |
コマンド引数 |
|
(オプション)コマンドを Jinja テンプレートとして定義すると、 |
ターゲットFPC |
|
(オプション)vtyコマンドを実行する柔軟なPICコンセントレータ(FPC)。 |
テーブル項目 |
|
(オプション)出力をセクションに分割する方法を定義する文字列または正規表現。これらのセクションは、関連付けられたビューの反復可能な参照になります。 '*' を指定すると、各行ではなく文字列全体が抽出され、照合されます。 |
テーブル項目キー |
|
(オプション)各 Table 項目を一意に識別する 1 つ以上のキーを定義する文字列または文字列のリスト。 |
選択したキー |
|
(オプション)データを返す 1 つ以上の Table 項目キーの一覧。 |
セクションのタイトル |
|
(オプション)解析するデータを含む出力のセクションを選択する文字列。 |
フィールド区切り文字 |
|
(オプション)キーと値のペアで構成されるコマンド出力のデータを分割する方法を定義する区切り文字。抽出されたデータは、キーと値のペアとしてディクショナリに格納されます。 |
評価式 |
|
(オプション)ユーザー定義キーを数式を含む文字列にマップする 1 つ以上のキーと値のペアの連想配列 (ディクショナリ)。データを取得すると、式は Python |
テーブルビュー |
|
(オプション)テーブル項目からフィールド データを抽出するために使用されるビュー。 |
TextFSMテンプレート |
|
(オプション)データの解析に TextFSM テンプレートを使用するかどうかを指定するブール値。 |
TextFSMテンプレートプラットフォーム識別子 |
|
(オプション)TextFSM テンプレートを使用する場合は、テンプレートのプラットフォームを指定します。 |
テーブル名
テーブル名は、テーブルのユーザー定義識別子です。YAML ファイルまたは文字列には、1 つ以上のテーブルを含めることができます。YAML ドキュメントの先頭は左揃えにする必要があります。次の例では、 という名前の ChassisFanTableテーブルを定義しています。
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
コマンド
非構造化出力用のJunos PyEZ op テーブルは、CLI または vty コマンドのテキスト出力からデータを抽出します。デバイスで実行するCLIコマンドを指定するには、テーブル定義に プロパティを含める command か、特定のFPCで実行するvtyコマンドを指定する必要があります。コマンドは、単純な文字列または Jinja テンプレートとして定義できます。
たとえば、次の表はデバイス上でコマンドを実行します show chassis fan 。
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
次の表は、 show cmerror module brief ターゲットFPCでvtyコマンドを実行しています。
--- CMErrorTable: command: show cmerror module brief target: fpc1 key: module view: CMErrorView
コマンドを Jinja テンプレートとして定義する場合は、テンプレート内の変数をテンプレートのレンダリング時に使用される値にマップするキーと値のペアのディクショナリをパラメーターに指定 args する必要もあります。コマンドを Jinja テンプレートとして定義する方法については、「 コマンド引数 (args)」を参照してください。
コマンド引数 (引数)
Jinjaテンプレートを使用してパラメータの command CLIまたはvtyコマンドを定義し、コマンド引数を変数に置き換えることができます。Jinja テンプレートを使用する場合は、Jinja テンプレートの変数名をテンプレートのレンダリング時に使用される値にマップするキーと値のペアのディクショナリである パラメーターも定義 args する必要があります。テーブル定義でテンプレート変数のデフォルト値を指定し、Junos PyEZ アプリケーションで値を定義することもできます。
テンプレート変数のデフォルト値を定義するには、テーブル定義にパラメーターを含めargs、各テンプレート変数をデフォルト値にマップします。次の表は、1 つの変数 を持つ Jinja テンプレートを使用するコマンドを定義していますprotocol。このパラメータはargs、スクリプトでメソッドを呼び出しget()、そのデフォルトをオーバーライドする引数を指定しない場合に使用される のprotocolデフォルト値を定義します。
---
DdosPolicerStatsTable:
command: show ddos policer stats {{ protocol }}
args:
protocol: ospf
target: Null
title: "DDOS Policer Statistics:"
key: location
view: DdosPolicerStatsView
さらに、引数を args Table の get() メソッドのディクショナリとして定義して、次のことができます。
テーブルでデフォルト値が定義されていないテンプレート変数の値を定義します
1つ以上のテンプレート変数のテーブルで定義されたデフォルト値を上書きします
次の例では、前の表のコマンドを実行し、デフォルト値の 'ospf' の代わりにプロトコル 'bgp' を使用します。
from jnpr.junos import Device
from jnpr.junos.command.pfe_ddos_policer import DdosPolicerStatsTable
from pprint import pprint
import json
with Device(host='router1.example.com') as dev:
stats = DdosPolicerStatsTable(dev)
stats.get(target='fpc0', args={'protocol':'bgp'})
pprint(json.loads(stats.to_json()))
ターゲットFPC(fpc)
Junos PyEZ op テーブルは、特定の FPC(フレキシブル PIC コンセントレータ)上で vty コマンドを実行できます。vtyコマンドを使用する場合、ターゲットFPCを定義するためのパラメータをテーブルに含める target 必要があります。 target Null アプリケーションでターゲットFPCを に設定してユーザーに指定させるか、 target デフォルトFPCに設定して、ユーザーがアプリケーションでこの値を上書きすることができます。
以下の表では、 show memory vty コマンドを実行していますが、 を設定します target: Null。そのため、ユーザーは Junos PyEZ アプリケーションでターゲット FPC を指定する必要があります。
---
FpcMemory:
command: show memory
target: Null
key: ID
key_items:
- 0
- 1
view: FPCMemoryView
以下の表 show memory は、ユーザーがJunos PyEZアプリケーションでこの値を上書きしない限り、FPC 1でvtyコマンドを実行します。
---
FpcMemory:
command: show memory
target: fpc1
key: ID
key_items:
- 0
- 1
view: FPCMemoryView
Junos PyEZアプリケーションで、ターゲットFPCを定義するか、テーブルで定義されたデフォルトFPCをオーバーライドするには、テーブルのget()メソッドの引数をtarget目的のFPCに設定します。次に例を示します。
from jnpr.junos import Device
from jnpr.junos.command.fpc_memory import FpcMemory
from pprint import pprint
import json
with Device(host='router.example.com') as dev:
stats = FpcMemory(dev)
stats.get(target='fpc0')
pprint(json.loads(stats.to_json()))
テーブルアイテム(アイテム)
オプションの Table item プロパティは、解析のためにコマンド出力を分割する方法を定義する文字列または正規表現です。出力に類似した繰り返しデータ セットが含まれる場合は、データの各反復を照合して抽出するように定義 item できます。たとえば、多くの show interfaces インターフェイスに対して同様のデータ セットを返します。または、データを 1 つのテキスト ブロックとして抽出する必要があるタイミングを定義する item: '*' こともできます。
vty コマンドの show devices local 次の出力を考えてみます。
TSEC Ethernet Device Driver: .le1, Control 0x4296c218, (1000Mbit)
HW reg base 0xff724000
[0]: TxBD base 0x7853ce20, RxBD Base 0x7853d640
[1]: TxBD base 0x7853d860, RxBD Base 0x7853e080
[2]: TxBD base 0x7853e2a0, RxBD Base 0x785422c0
[3]: TxBD base 0x785426e0, RxBD Base 0x78544700
Receive:
185584608 bytes, 2250212 packets, 0 FCS errors, 0 multicast packets
107271 broadcast packets, 0 control frame packets
0 PAUSE frame packets, 0 unknown OP codes
0 alignment errors, 0 frame length errors
0 code errors, 0 carrier sense errors
0 undersize packets, 0 oversize packets
0 fragments, 0 jabbers, 0 drops
Receive per queue:
[0]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[1]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[2]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[3]: 203586808 bytes, 2250219 packets, 0 dropped
0 jumbo, 0 truncated jumbo
Transmit:
288184646 bytes, 2038370 packets, 0 multicast packets
106531 broadcast packets, 0 PAUSE control frames
0 deferral packets, 0 excessive deferral packets
0 single collision packets, 0 multiple collision packets
0 late collision packets, 0 excessive collision packets
0 total collisions, 0 drop frames, 0 jabber frames
0 FCS errors, 0 control frames, 0 oversize frames
0 undersize frames, 0 fragments frames
Transmit per queue:
[0]: 10300254 bytes, 72537 packets
0 dropped, 0 fifo errors
[1]: 4474302 bytes, 106531 packets
0 dropped, 0 fifo errors
[2]: 260203538 bytes, 1857137 packets
0 dropped, 0 fifo errors
[3]: 199334 bytes, 2179 packets
0 dropped, 0 fifo errors
TSEC status counters:
kernel_dropped:0, rx_large:0 rx_short: 0
rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0
rx_bsy: 0,rx_babr:0, rx_trunc: 0
rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0
rx_errors: 0, rx_ints: 2250110, collisions: 0
eberr:0, tx_babt: 0, tx_underrun: 0
tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0
tx_aborted_errors: 0, tx_ints: 2038385, resets: 1
TSEC Ethernet Device Driver: .le3, Control 0x42979220, (1000Mbit)
HW reg base 0xff726000
[0]: TxBD base 0x78545720, RxBD Base 0x78545f40
[1]: TxBD base 0x78546160, RxBD Base 0x78546980
[2]: TxBD base 0x78546ba0, RxBD Base 0x7854abc0
[3]: TxBD base 0x7854afe0, RxBD Base 0x7854d000
Receive:
0 bytes, 0 packets, 0 FCS errors, 0 multicast packets
0 broadcast packets, 0 control frame packets
0 PAUSE frame packets, 0 unknown OP codes
0 alignment errors, 0 frame length errors
0 code errors, 0 carrier sense errors
0 undersize packets, 0 oversize packets
0 fragments, 0 jabbers, 0 drops
Receive per queue:
[0]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[1]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[2]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
[3]: 0 bytes, 0 packets, 0 dropped
0 jumbo, 0 truncated jumbo
Transmit:
6817984 bytes, 106531 packets, 0 multicast packets
106531 broadcast packets, 0 PAUSE control frames
0 deferral packets, 0 excessive deferral packets
0 single collision packets, 0 multiple collision packets
0 late collision packets, 0 excessive collision packets
0 total collisions, 0 drop frames, 0 jabber frames
0 FCS errors, 0 control frames, 0 oversize frames
0 undersize frames, 0 fragments frames
Transmit per queue:
[0]: 0 bytes, 0 packets
0 dropped, 0 fifo errors
[1]: 4474302 bytes, 106531 packets
0 dropped, 0 fifo errors
[2]: 0 bytes, 0 packets
0 dropped, 0 fifo errors
[3]: 0 bytes, 0 packets
0 dropped, 0 fifo errors
TSEC status counters:
kernel_dropped:0, rx_large:0 rx_short: 0
rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0
rx_bsy: 0,rx_babr:0, rx_trunc: 0
rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0
rx_errors: 0, rx_ints: 0, collisions: 0
eberr:0, tx_babt: 0, tx_underrun: 0
tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0
tx_aborted_errors: 0, tx_ints: 106531, resets: 1
次の表は、 で始まる出力 TSEC Ethernet Device Driver:の各セクションを抽出しています。この場合、 の値は key: name 、 で item定義された正規表現内のキャプチャ グループから派生します。
---
DevicesLocalTable:
command: show devices local
target: fpc1
item: 'TSEC Ethernet Device Driver: (\.?\w+),'
key: name
view: DevicesLocalView
DevicesLocalView:
fields:
TSEC_status_counters: _TSECStatusCountersTable
receive_counters: _ReceiveTable
transmit_per_queue: _TransmitQueueTable
また、各行を一致させるのではなく、出力のセクション全体と一致させる場合は、アスタリスク ('*') として定義 item することもできます。を含める item: '*'場合、ほとんどの場合、抽出する出力のセクションの見出しを指定するための パラメーターも含め title る必要があります。を使用して item: '*' 出力を抽出すると、ビューにパラメーターを含め regex 、各式をテキスト文字列全体と照合する場合に便利です。それ以外の場合は、式が結合され、 regex 各行と照合されます。
次の表は、見出し Receive: の下のテキスト ブロックを抽出し、各正規表現をテキスト文字列全体と照合します。
_ReceiveTable:
item: '*'
title: 'Receive:'
view: _ReceiveView
_ReceiveView:
regex:
bytes: '(\d+) bytes'
packets: '(\d+) packets'
FCS_errors: '(\d+) FCS errors'
broadcast_packets: '(\d+) broadcast packets'
テーブル項目キー (キー)
省略可能 key なプロパティは、Table 項目を一意に識別するために使用される出力フィールドを定義します。テーブル項目は、単一のキーまたはキーのリストを使用して識別できます。テーブルとビューが反復データを返す場合、 key 値はビューで定義された変数名またはフィールド名を参照する必要があります。
次の show chassis fan 出力について考えてみます。
Item Status RPM Measurement
Fan 1 OK 5280 Spinning at normal speed
Fan 2 OK 5280 Spinning at normal speed
Fan 3 OK 5280 Spinning at normal speed
Fan 4 OK 5280 Spinning at normal speed
Fan 5 OK 5280 Spinning at normal speed
次の表では、表項目キー fan-nameを と定義しており、これは出力の列の下の Item 値にマップされます。
ChassisFanTable:
command: show chassis fan
key: fan-name
view: ChassisFanView
ChassisFanView:
columns:
fan-name: Item
fan-status: Status
fan-rpm: RPM
fan-measurement: Measurement
Junos PyEZアプリケーションでデータを取得して印刷すると、結果の辞書の各項目はこのフィールドの値をキーとして使用します。
dict_keys(['Fan 1', 'Fan 2', 'Fan 3', 'Fan 4', 'Fan 5'])
また、複合キーを使用してテーブル項目を識別するリストとして定義 key することもできます。例えば:
---
FPCIPV4AddressTable:
command: show ipv4 address
target: fpc1
key:
- name
- addr
view: FPCIPV4AddressView
FPCIPV4AddressView:
columns:
index: Index
addr: Address
name: Name
選択したキー (key_items)
このパラメーターは key 、Table 項目を一意に識別する出力フィールドを定義します。Table にパラメーターを含める key 場合、省略可能 key_items なパラメーターを使用して、特定のキー値のデータのみを返すことができます。 key_items データを取得するテーブル項目のキーまたはキーのリストを定義します。このパラメータは key_items 、テーブル定義またはJunos PyEZアプリケーションで定義できます。
次の show chassis fan 出力について考えてみます。
Item Status RPM Measurement
Fan 1 OK 5280 Spinning at normal speed
Fan 2 OK 5280 Spinning at normal speed
Fan 3 OK 5280 Spinning at normal speed
Fan 4 OK 5280 Spinning at normal speed
Fan 5 OK 5280 Spinning at normal speed
次の表では、表項目キー fan-name を と定義し、キー値が に Fan 1等しい表項目のデータのみを取得します。
ChassisFanTable:
command: show chassis fan
key: fan-name
key_items:
- Fan 1
view: ChassisFanView
ChassisFanView:
columns:
fan-name: Item
fan-status: Status
fan-rpm: RPM
fan-measurement: Measurement
Junos PyEZアプリケーションでは、key_itemsテーブルで定義されたものkey_itemsを返す、またはオーバーライドする定義を定義するには、テーブルのget()メソッドの引数をkey_items目的の項目のリストまたはタプルに設定します。
from jnpr.junos import Device
from jnpr.junos.command.chassis_fan import ChassisFanTable
from pprint import pprint
import json
with Device(host='router.example.com') as dev:
fans = ChassisFanTable(dev)
fans.get(key_items=['Fan 1', 'Fan 2'])
pprint(json.loads(fans.to_json()))
user@host:~$ python3 junos-pyez-get-fan-data.py
{'Fan 1': {'fan-measurement': 'Spinning at normal speed',
'fan-name': 'Fan 1',
'fan-rpm': 5280,
'fan-status': 'OK'},
'Fan 2': {'fan-measurement': 'Spinning at normal speed',
'fan-name': 'Fan 2',
'fan-rpm': 5280,
'fan-status': 'OK'}}
セクション タイトル (タイトル)
テーブルには、データの抽出と解析に使用するコマンド出力内のセクションの開始点を定義するオプションの title パラメーターを含めることができます。表で が定義され item: '*'ている場合、 を含める必要があります title を抽出します出力のセクションの見出しを指定します
たとえば、より大きな出力セットで囲まれた次のコマンド出力について考えてみます。
... TSEC status counters: kernel_dropped:0, rx_large:0 rx_short: 0 rx_nonoctet: 0, rx_crcerr: 0, rx_overrun: 0 rx_bsy: 0,rx_babr:0, rx_trunc: 0 rx_length_errors: 0, rx_frame_errors: 0 rx_crc_errors: 0 rx_errors: 0, rx_ints: 2250110, collisions: 0 eberr:0, tx_babt: 0, tx_underrun: 0 tx_timeout: 0, tx_timeout: 0,tx_window_errors: 0 tx_aborted_errors: 0, tx_ints: 2038385, resets: 1 ...
次の表では、 title パラメーターを使用して、出力のセクションから TSEC status counters データを抽出および解析します。この場合、Table は '*' として定義 item し、データを 1 つのテキスト文字列と見なします。
_TSECStatusCountersTable:
item: '*'
title: 'TSEC status counters:'
view: _TSECStatusCountersView
_TSECStatusCountersView:
regex:
kernel_dropped: 'kernel_dropped:(\d+)'
rx_large: 'rx_large:(\d+)'
フィールド区切り文字 (区切り文字)
一部の操作コマンドは、キーと値のペアのみで構成される出力を返します。データのセット全体を取得し、各キーと値のペアを抽出するだけの場合は、個別のビューを定義する代わりに、パラメーターを使用して delimiter 各データペアを分割する方法を定義できます。Junos PyEZは、デリミタを使用して指定された境界でデータを分割し、各キーと値のペアを辞書に格納します。
vty コマンドの show link stats 次の出力について考えてみます。
PPP LCP/NCP: 0 HDLC keepalives: 0 RSVP: 0 ISIS: 0 OSPF Hello: 539156 OAM: 0 BFD: 15 UBFD: 0 LMI: 0 LACP: 0 ETHOAM: 0 SYNCE: 0 PTP: 0 L2TP: 0 LNS-PPP: 0 ARP: 4292 ELMI: 0 VXLAN MRESOLVE: 0 Unknown protocol: 42
次の表では、区切り記号をコロン (:) 文字として定義しています。
--- FPCLinkStatTable: command: show link stats target: fpc1 delimiter: ":"
Junos PyEZアプリケーションでデータを取得すると、テーブルは出力の各行を区切り文字で分割し、キーと値のペアをディクショナリに保存します。
{'ARP': 4292, 'ELMI': 0, 'SYNCE': 0, 'ISIS': 0, 'BFD': 15, 'PPP LCP/NCP': 0,
'OAM': 0, 'ETHOAM': 0, 'LACP': 0, 'LMI': 0, 'Unknown protocol': 42,
'UBFD': 0, 'L2TP': 0, 'HDLC keepalives': 0, 'LNS-PPP': 0,
'OSPF Hello': 539156, 'RSVP': 0, 'VXLAN MRESOLVE': 0, 'PTP': 0}
評価式(評価)
省略可能 eval なパラメーターを使用して、Table and View によって返される最終データのキーと値のペアを追加または変更できます。このパラメーターは eval 、Python eval 関数によって評価される数式を含む文字列にキー名をマップします。テーブルとビューの両方にパラメーターを含める eval ことができ、 eval 複数の値を定義および計算できます。
テーブルで使用すると eval 、計算のために完全なデータディクショナリが参照され、キーと計算値が 1 つの追加項目としてディクショナリに追加されます。ビューで使用すると eval 、データの反復ごとに式が計算され、計算された値がその反復のデータに追加されます。キー名が eval ビューで定義されたキーと一致する場合、その eval キーの値を計算値に置き換えます。 eval キー名がビューで定義されたキーと一致しない場合は、 eval 新しいキーと計算値をデータに追加します。
式は eval 、 data View によって返されるディクショナリを参照できます。式はJinjaテンプレート変数を使用して参照 data する必要があります。Junos PyEZが式の評価時に変数を辞書に置き換えることができるようにするためです。
次の例では eval 、Table 定義でデータディクショナリに 1 つの追加エントリを含めます。追加された項目のキーは cchip_errors_from_lkup_chipで、その値は割り込み回数の合計です。
---
CChipLiInterruptStatsTable:
command: show xmchip {{ chip_instance }} li interrupt-stats
target: NULL
args:
chip_instance: 0
key:
- li_block
- name
eval:
cchip_errors_from_lkup_chip: "reduce(lambda x,y: x+y, [v['interrupts'] for k,v in {{ data }}.items()])"
view: CChipLiInterruptStatsView
CChipLiInterruptStatsView:
columns:
li_block: LI Block
name: Interrupt Name
interrupts: Number of Interrupts
last_occurance: Last Occurrence
テーブルで、次のように複数のキーと値のペアを計算して追加するように定義 eval することもできます。
---
CChipDRDErrTable:
command: show xmchip {{ instance }} drd error-stats
args:
instance: 0
target: NULL
key: Interrupt Name
item: '*'
eval:
cchip_drd_wan_errors: sum([v['interrupt_count'] for k, v in {{ data }}.items() if k.endswith('_0')])
cchip_drd_fab_errors: sum([v['interrupt_count'] for k, v in {{ data }}.items() if k.endswith('_1')])
view: CChipDRDErrView
CChipDRDErrView:
regex:
cchip_drd_wan_timeouts: 'Total WAN reorder ID timeout errors:\s+(\d+)'
cchip_drd_fab_timeouts: 'Total fabric reorder ID timeout errors:\s+(\d+)'
columns:
interrupt_name: Interrupt Name
interrupt_count: Number of Interrupts
filters:
- interrupt_count
ビューでの使用については eval 、「 評価式 (eval)」を参照してください。
テーブル ビュー (表示)
このプロパティは view 、テーブル定義を特定のビューに関連付けます。ビューは、テーブル出力の解析方法を定義し、ユーザー定義の Python 変数名を選択したテーブル項目の出力フィールドにマップします。ビューをカスタマイズして、テーブル項目から特定のフィールドのみを選択できます。
出力がキーと値のペアのみで構成されている場合は、Table の delimiter パラメータを使用してデータを抽出し、キーと値のペアをディクショナリに格納できます。この場合、別のビューを定義する必要はありません。
TextFSMテンプレート(プラットフォームおよびuse_textfsm)
Junos PyEZテーブルは、TextFSMテンプレートを参照して、ジュニパーネットワークスのデバイスまたは他のベンダーのデバイスからのコマンド出力を解析することができます。テーブルでTextFSMテンプレートを使用するには、 ntc-templates Junos PyEZサーバーまたは仮想環境にライブラリをインストールする必要があります。
TextFSM テンプレートを使用してコマンド出力を解析するには、 をテーブルに含め use_textfsm: True ます。TextFSM テンプレートは、単独で使用することも、Junos PyEZ ビューと組み合わせて使用することもできます。Junos PyEZは、 platform および command の値を使用してテンプレートのファイル名を決定します。
例えば、以下の表では、 juniper_junos_show_arp_no-resolve.textfsm テンプレートを使用して、ジュニパーネットワークスのJunosデバイスからのコマンド出力を解析しています。
--- ArpTableTextFSM: command: show arp no-resolve platform: juniper_junos key: MAC use_textfsm: True
TextFSM テンプレートでの Junos PyEZ テーブルの使用に関する詳細については、 TextFSM テンプレートでの Junos PyEZ テーブルの使用を参照してください。