サービスの改善にご協力お願いします。

お客様のご意見をお聞かせください。

アンケートの所要時間はおよそ 2 分です。

Announcement: Try the Ask AI chatbot for answers to your technical questions about Juniper products and solutions.

close
external-header-nav
keyboard_arrow_up
close
keyboard_arrow_left
Junos PyEZ開発者ガイド
Table of Contents Expand all
list Table of Contents

この機械翻訳はお役に立ちましたでしょうか?

starstarstarstarstar
Go to English page
免責事項:

このページは、サードパーティー製機械翻訳ソフトウェアを使用して翻訳されます。質の高い翻訳を提供するために合理的な対応はされていますが、ジュニパーネットワークスがその正確性を保証することはできかねます。この翻訳に含まれる情報の正確性について疑問が生じた場合は、英語版を参照してください. ダウンロード可能なPDF (英語版のみ).

非構造化出力を解析するためのJunos PyEZ操作テーブルの定義

date_range 10-May-24

概要 CLIまたはvtyコマンドの出力からデータを選択し、Junosデバイスから運用情報を抽出するカスタムテーブルを作成します。

Junos PyEZオペレーショナル(op) 非構造化出力のテーブルは、Junosデバイスで実行されたCLIコマンド、または特定のFPC(フレキシブルPICコンセントレータ)で実行されたvtyコマンドのテキスト出力からデータを抽出します。抽出されたデータは JSON に変換されます。これにより、デバイスの動作状態情報をすばやく取得して分析できます。Junos PyEZ op 非構造化出力用のテーブルは、XML などの構造化形式では返されないコマンド出力を解析する必要がある場合に特に便利です。

このトピックでは、Table のさまざまなコンポーネントについて説明します。

非構造化出力を解析するためのopテーブルのパラメータの概要

Junos PyEZ テーブルは YAML を使用してフォーマットされます。Op テーブル定義には、 表 1 に要約されている必須パラメーターとオプション・パラメーターをいくつか含めることができます。

表1: 非構造化出力用のJunos PyEZ Opテーブルのパラメータ

テーブル パラメーター名

テーブル パラメーター

説明

テーブル名

テーブルのユーザー定義識別子。

コマンド

command

CLI または vty コマンドを実行します。

コマンド引数

args

(オプション)コマンドを Jinja テンプレートとして定義すると、 args はキーと値のペアの連想配列またはディクショナリであり、コマンド テンプレート内の変数をテンプレートのレンダリング時に使用される既定値にマップします。

ターゲットFPC

target

(オプション)vtyコマンドを実行する柔軟なPICコンセントレータ(FPC)。

テーブル項目

item

(オプション)出力をセクションに分割する方法を定義する文字列または正規表現。これらのセクションは、関連付けられたビューの反復可能な参照になります。

'*' を指定すると、各行ではなく文字列全体が抽出され、照合されます。

テーブル項目キー

key

(オプション)各 Table 項目を一意に識別する 1 つ以上のキーを定義する文字列または文字列のリスト。

選択したキー

key_items

(オプション)データを返す 1 つ以上の Table 項目キーの一覧。

セクションのタイトル

title

(オプション)解析するデータを含む出力のセクションを選択する文字列。

フィールド区切り文字

delimiter

(オプション)キーと値のペアで構成されるコマンド出力のデータを分割する方法を定義する区切り文字。抽出されたデータは、キーと値のペアとしてディクショナリに格納されます。

評価式

eval

(オプション)ユーザー定義キーを数式を含む文字列にマップする 1 つ以上のキーと値のペアの連想配列 (ディクショナリ)。データを取得すると、式は Python eval 関数を使用して評価されます。キーと計算値は、テーブルとビューによって返される最終データに追加されます。

テーブルビュー

view

(オプション)テーブル項目からフィールド データを抽出するために使用されるビュー。

TextFSMテンプレート

use_textfsm

(オプション)データの解析に TextFSM テンプレートを使用するかどうかを指定するブール値。

TextFSMテンプレートプラットフォーム識別子

platform

(オプション)TextFSM テンプレートを使用する場合は、テンプレートのプラットフォームを指定します。

テーブル名

テーブル名は、テーブルのユーザー定義識別子です。YAML ファイルまたは文字列には、1 つ以上のテーブルを含めることができます。YAML ドキュメントの先頭は左揃えにする必要があります。次の例では、 という名前の ChassisFanTableテーブルを定義しています。

content_copy zoom_out_map
---
ChassisFanTable:
  command: show chassis fan
  key: fan-name
  view: ChassisFanView

コマンド

非構造化出力用のJunos PyEZ op テーブルは、CLI または vty コマンドのテキスト出力からデータを抽出します。デバイスで実行するCLIコマンドを指定するには、テーブル定義に プロパティを含める command か、特定のFPCで実行するvtyコマンドを指定する必要があります。コマンドは、単純な文字列または Jinja テンプレートとして定義できます。

たとえば、次の表はデバイス上でコマンドを実行します show chassis fan

content_copy zoom_out_map
---
ChassisFanTable:
  command: show chassis fan
  key: fan-name
  view: ChassisFanView

次の表は、 show cmerror module brief ターゲットFPCでvtyコマンドを実行しています。

content_copy zoom_out_map
---
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デフォルト値を定義します。

content_copy zoom_out_map
---
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' を使用します。

content_copy zoom_out_map
          
         
               
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 を指定する必要があります。

content_copy zoom_out_map
---
FpcMemory:
  command: show memory
  target: Null
  key: ID
  key_items:
    - 0
    - 1
  view: FPCMemoryView

以下の表 show memory は、ユーザーがJunos PyEZアプリケーションでこの値を上書きしない限り、FPC 1でvtyコマンドを実行します。

content_copy zoom_out_map
---
FpcMemory:
  command: show memory
  target: fpc1
  key: ID
  key_items:
    - 0
    - 1
  view: FPCMemoryView

Junos PyEZアプリケーションで、ターゲットFPCを定義するか、テーブルで定義されたデフォルトFPCをオーバーライドするには、テーブルのget()メソッドの引数をtarget目的のFPCに設定します。次に例を示します。

content_copy zoom_out_map
          
         
               
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 次の出力を考えてみます。

content_copy zoom_out_map
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定義された正規表現内のキャプチャ グループから派生します。

content_copy zoom_out_map
---
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: の下のテキスト ブロックを抽出し、各正規表現をテキスト文字列全体と照合します。

content_copy zoom_out_map
_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 出力について考えてみます。

content_copy zoom_out_map
      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 値にマップされます。

content_copy zoom_out_map
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アプリケーションでデータを取得して印刷すると、結果の辞書の各項目はこのフィールドの値をキーとして使用します。

content_copy zoom_out_map
dict_keys(['Fan 1', 'Fan 2', 'Fan 3', 'Fan 4', 'Fan 5'])

また、複合キーを使用してテーブル項目を識別するリストとして定義 key することもできます。例えば:

content_copy zoom_out_map
---
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 出力について考えてみます。

content_copy zoom_out_map
      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等しい表項目のデータのみを取得します。

content_copy zoom_out_map
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目的の項目のリストまたはタプルに設定します。

content_copy zoom_out_map
          
         
               
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())) 
content_copy zoom_out_map
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 を抽出します出力のセクションの見出しを指定します

たとえば、より大きな出力セットで囲まれた次のコマンド出力について考えてみます。

content_copy zoom_out_map
...
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 つのテキスト文字列と見なします。

content_copy zoom_out_map
_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 次の出力について考えてみます。

content_copy zoom_out_map
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

次の表では、区切り記号をコロン (:) 文字として定義しています。

content_copy zoom_out_map
---
FPCLinkStatTable:
  command: show link stats
  target: fpc1
  delimiter: ":"

Junos PyEZアプリケーションでデータを取得すると、テーブルは出力の各行を区切り文字で分割し、キーと値のペアをディクショナリに保存します。

content_copy zoom_out_map
{'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 新しいキーと計算値をデータに追加します。

式は evaldata View によって返されるディクショナリを参照できます。式はJinjaテンプレート変数を使用して参照 data する必要があります。Junos PyEZが式の評価時に変数を辞書に置き換えることができるようにするためです。

次の例では eval 、Table 定義でデータディクショナリに 1 つの追加エントリを含めます。追加された項目のキーは cchip_errors_from_lkup_chipで、その値は割り込み回数の合計です。

content_copy zoom_out_map
---
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 することもできます。

content_copy zoom_out_map
---
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デバイスからのコマンド出力を解析しています。

content_copy zoom_out_map
---
ArpTableTextFSM:
  command: show arp no-resolve
  platform: juniper_junos
  key: MAC
  use_textfsm: True

TextFSM テンプレートでの Junos PyEZ テーブルの使用に関する詳細については、 TextFSM テンプレートでの Junos PyEZ テーブルの使用を参照してください

external-footer-nav