非構造化出力を解析するための Junos PyEZ 操作テーブルの定義
CLIまたはvtyコマンド出力からデータを選択して、Junosデバイスから運用情報を抽出するカスタムテーブルを作成します。
非構造化出力用のJunos PyEZ運用(op)テーブルは、次のテキスト出力からデータを抽出できます。
-
Junosデバイスで実行されるCLIコマンド
-
特定のフレキシブルPICコンセントレータ(FPC)で実行されるvtyコマンド
抽出されたデータはその後、JSON に変換されます。非構造化出力用のJunos PyEZ opテーブルを使用すると、デバイスの動作状態情報をすばやく取得して分析できます。このテーブルは、XML などの構造化形式では取得できないコマンド出力を解析する必要がある場合に特に役立ちます。
このトピックでは、テーブルのさまざまなコンポーネントについて説明します。
非構造化出力を解析するための op テーブルのパラメーターの概要
Junos PyEZテーブルは、YAMLを使用してフォーマットされています。運用テーブルの定義には、必須およびオプションのパラメーターを多数含めることができます。 表1は 、パラメーターを要約したものです。
|
テーブルパラメータ名 |
テーブルパラメータ |
説明 |
|---|---|---|
|
テーブル名 |
– |
テーブルのユーザー定義識別子。 |
|
コマンド |
|
実行するCLIまたはvtyコマンド。 |
|
コマンド引数 |
|
(オプション)コマンドを Jinja テンプレートとして定義する場合、 |
|
ターゲットFPC |
|
(オプション)vtyコマンドを実行するFPC。 |
|
テーブルアイテム |
|
(オプション)出力をセクションに分割する方法を定義する文字列または正規表現。これらのセクションは、関連するビューの反復可能な参照になります。 「*」を指定すると、個々の行ではなく文字列全体を抽出して照合します。 |
|
テーブルアイテムキー |
|
(オプション)各テーブル項目を一意に識別する1つ以上のキーを定義する文字列または文字列のリスト。 |
|
選択したキー |
|
(オプション)データを返す1つ以上のテーブル項目キーのリスト。 |
|
セクションタイトル |
|
(オプション)解析するデータを含む出力のセクションを選択する文字列。 |
|
フィールド区切り記号 |
|
(オプション)キーと値のペアで構成されるコマンド出力でデータを分割する方法を定義する区切り文字。抽出されたデータは、キーと値のペアとして辞書に保存されます。 |
|
評価式 |
|
(オプション)ユーザー定義のキーを数学式を含む文字列にマップする 1 つ以上のキーと値のペアの連想配列または辞書。データを取得すると、式が評価されます。キーと計算された値は、テーブルとビューによって返される最終データに追加されます。 |
|
テーブルビュー |
|
(オプション)テーブル項目からフィールドデータを抽出するために使用されるビュー。 |
|
TextFSMテンプレート |
|
(オプション)TextFSM テンプレートを使用してデータを解析するかどうかを指定するブール値。 |
|
TextFSMテンプレートプラットフォーム識別子 |
|
(オプション)TextFSM テンプレートを使用する場合は、テンプレートのプラットフォームを指定します。 |
テーブル名
テーブル名は、テーブルのユーザー定義識別子です。YAMLファイルまたは文字列には、1つ以上のテーブルを含めることができます。YAML 文書の先頭は左揃えにする必要があります。次の例では、 ChassisFanTable という名前のテーブルを定義します。
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
コマンド
非構造化出力用の Junos PyEZ 演算テーブルは、CLI コマンドまたは vty コマンドのテキスト出力からデータを抽出します。デバイスで実行するCLIコマンドまたは特定のFPCで実行するvtyコマンドを指定するには、テーブル定義に command プロパティを含める必要があります。コマンドは、単純な文字列またはJinjaテンプレートとして定義できます。
例えば、以下の表はデバイス上で show chassis fan コマンドを実行します。
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView
次の表は、ターゲットFPCで show cmerror module brief vtyコマンドを実行します。
--- CMErrorTable: command: show cmerror module brief target: fpc1 key: module view: CMErrorView
コマンドを Jinja テンプレートとして定義する場合は、 args パラメーターも指定する必要があります。 args パラメーターは、テンプレート内の変数をテンプレートのレンダリング時に使用される値にマッピングするキーと値のペアの辞書です。コマンドを Jinja テンプレートとして定義する方法については、「 コマンド引数 (args)」を参照してください。
コマンド引数(引数)
commandパラメーターのCLIまたはvtyコマンドを、コマンド引数の変数を置き換えるJinjaテンプレートとして定義できます。Jinjaテンプレートを使用する場合は、argsパラメーターも定義する必要があります。args パラメーターは、Jinja テンプレートの変数名をテンプレートのレンダリング時に使用される値にマップするキーと値のペアのディクショナリです。テーブル定義でテンプレート変数のデフォルト値を指定したり、Junos PyEZアプリケーションで値を定義したりすることもできます。
テンプレート変数のデフォルト値を定義するには、テーブル定義に args パラメーターを含め、各テンプレート変数をデフォルト値にマップします。次の表は、変数 protocol が 1 つの Jinja テンプレートを使用するコマンドを定義しています。 args パラメーターは、 protocolのデフォルト値を定義します。アプリケーションは、スクリプトで get() メソッドを呼び出すときに既定値を使用し、その既定値をオーバーライドする引数を提供しません。
---
DdosPolicerStatsTable:
command: show ddos policer stats {{ protocol }}
args:
protocol: ospf
target: Null
title: "DDOS Policer Statistics:"
key: location
view: DdosPolicerStatsView
さらに、Table の get() メソッドで args 引数を辞書として定義して、次のことを行うことができます。
-
テーブルでデフォルト値が定義されていないテンプレート変数の値を定義します
-
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で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
次の表は、ユーザーがJunos PyEZアプリケーションでこの値を上書きしない限り、FPC 1で show memory vtyコマンドを実行します。
---
FpcMemory:
command: show memory
target: fpc1
key: ID
key_items:
- 0
- 1
view: FPCMemoryView
Junos PyEZアプリケーションでは、ターゲットFPCを定義したり、テーブルで定義されたデフォルトFPCを上書きすることができます。FPCを指定するには、次に例のように、Tableの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: '*' を定義することもできます。
show devices local vtyコマンドの以下の出力について考えてみましょう。
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 プロパティは、テーブル項目を一意に識別するために使用される出力フィールドを定義します。単一のキーまたはキーのリストを使用して、テーブルアイテムを識別できます。テーブルとビューが反復データを返す場合、 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 パラメーターは、テーブル アイテムを一意に識別する出力フィールドを定義します。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を上書きしたりできます。Table の 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 セクションからデータを抽出して解析します。この場合、テーブルは item を「*」と定義し、データを単一のテキスト文字列と見なします。
_TSECStatusCountersTable:
item: '*'
title: 'TSEC status counters:'
view: _TSECStatusCountersView
_TSECStatusCountersView:
regex:
kernel_dropped: 'kernel_dropped:(\d+)'
rx_large: 'rx_large:(\d+)'
フィールド区切り記号(区切り記号)
一部の操作コマンドは、キーと値のペアのみで構成される出力を返します。単にデータ セット全体を取得し、各キーと値のペアを抽出する場合は、個別のビューを定義する代わりに delimiter パラメーターを使用できます。 delimiter パラメーターは、各データ ペアを分割する方法を定義します。Junos PyEZは、区切り文字を使用して指定された境界でデータを分割し、各キーと値のペアを辞書に格納します。
show link stats vtyコマンドの以下の出力について考えてみましょう。
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)
オプションの eval パラメーターを使用して、テーブルとビューによって返される最終データにキーと値のペアを追加または変更できます。 eval パラメーターは、キー名を数学式を含む文字列にマップします。テーブルとビューの両方に eval パラメーターを含めることができ、複数の値を定義および計算できます eval 。
テーブルで eval を使用すると、計算の完全なデータ ディクショナリが参照されます。キーと計算値は、単一の追加項目として辞書に追加されます。ビューで eval を使用すると、式はデータの反復ごとに計算されます。計算された値が、その反復のデータに追加されます。 eval キー名がビューで定義されたキーと一致する場合、 eval そのキーの値を計算された値に置き換えます。 eval キー名がビューで定義されたキーと一致しない場合、 eval は新しいキーと計算値をデータに追加します。
eval式は、ビューによって返されるdata辞書を参照できます。式が評価されるときに PyEZ が変数を辞書に置き換えることができるJunosように、式は Jinja テンプレート変数を使用してdataを参照する必要があります。
Junos PyEZ リリース 2.8.1 以降、Table および View eval ステートメントで使用される式は、コード実行のセキュリティリスクを軽減するために制限された実装を使用して評価されます。Junos PyEZは、評価前に各式を解析し、サポートされているPythonの構文、関数、メソッド、操作のセットに対して検証します。サポートされていない要素や安全でない要素を含む式は、 UnsafeExpressionError エラーで拒否されます。 表2は 、サポートされている式の概要を示しています。
| カテゴリー | サポートされている構文 | 例文 |
|---|---|---|
|
算術 |
+ - * / // % ** |
|
|
ブール論理 |
|
|
|
リテラル |
整数、浮動小数点数 |
|
|
文字列リテラル |
|
|
|
辞書リテラル |
|
|
|
リテラルを一覧表示する |
|
|
|
リテラルを設定する |
|
|
|
タプルリテラル |
|
|
|
比較 |
|
|
|
辞書 |
|
|
|
リスト |
|
|
|
設定 |
|
{k for k in {{ data }}.keys()} |
|
条件式 |
|
|
|
機能 |
|
|
|
ジェネレータ |
|
|
|
インデックス作成 |
|
|
|
メンバーシップ |
|
|
|
メソッド |
|
|
|
スライシング |
|
|
|
単項演算子 |
|
|
次の例では、テーブル定義の eval を使用して、データ ディクショナリに 1 つの追加エントリーを含めます。追加された項目のキーは total_interruptsで、その値は割り込み数の合計です。
---
CChipLiInterruptStatsTable:
command: show xmchip {{ chip_instance }} li interrupt-stats
target: NULL
args:
chip_instance: 0
key:
- li_block
- name
eval:
total_interrupts: "sum([v['interrupts'] for k,v in {{ data }}.items() if isinstance(v, dict) and 'cookie_sz_err' in v['name']])"
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変数名を選択したテーブル項目の出力フィールドにマップします。ビューをカスタマイズして、テーブルアイテムから特定のフィールドのみを選択することができます。
出力がキーと値のペアのみで構成されている場合は、テーブルの delimiter パラメーターを使用してデータを抽出し、キーと値のペアを辞書に格納できます。この場合、別途ビューを定義する必要はありません。
TextFSMテンプレート(プラットフォームおよびuse_textfsm)
Junos PyEZテーブルは、TextFSMテンプレートを参照して、ジュニパーネットワークスデバイスまたは他のベンダーのデバイスからのコマンド出力を解析できます。テーブルでTextFSMテンプレートを使用するには、Junos PyEZサーバーまたは仮想環境に ntc-templates ライブラリをインストールする必要があります。
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テーブルの使用を参照してください。
変更履歴テーブル
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がお使いのプラットフォームでサポートされているかどうかを確認します。
eval ステートメントで使用される式は、制限された実装を使用して評価されます。