非構造化出力を解析するJunos PyEZ運用テーブルのビューを定義する
Junos PyEZオペレーショナル(op) 非構造化出力のテーブルは、Junosデバイスで実行されたCLIコマンド、または特定のFPC(フレキシブルPICコンセントレータ)で実行されたvtyコマンドのテキスト出力からデータを抽出します。テーブルは ビューに関連付けられており、ビューはテーブルアイテムのフィールドにアクセスし、ユーザー定義のPython変数にマッピングするために使用されます。テーブルを特定のビューに関連付けるには、ビュー名を引数として受け取るプロパティをテーブル定義に含め view
ます。
ビューは、ユーザー定義変数を選択したテーブル項目のデータにマップします。ビューを使用すると、Python で操作できるプロパティを持つ変数として出力内の特定のフィールドにアクセスできます。Junos PyEZは、Pythonへのデータの抽出だけでなく、あらゆる型変換やデータの正規化も処理します。ビューで定義されるキーは、有効な Python 変数名である必要があります。
このトピックでは、ビューのさまざまなコンポーネントについて説明します。
非構造化出力を解析するためのビューのパラメーターの概要
Junos PyEZ ビューは、テーブルと同様に、YAML を使用してフォーマットされます。非構造化出力を解析するビューには、 表 1 に要約されているいくつかのパラメーターを含めることができます。
ビューパラメータ |
説明 |
---|---|
ビュー名 |
ビューのユーザー定義識別子。 |
|
(オプション)コマンド出力の列タイトルのリスト。 |
|
(オプション)ユーザー定義キーを数式を含む文字列にマップする 1 つ以上のキーと値のペアの連想配列 (ディクショナリ)。データの反復ごとに、式は Python |
|
(オプション)ユーザー定義キーを文字列にマップするキーと値のペアの連想配列 (ディクショナリ)。文字列が出力に存在する場合、変数は True に設定され、それ以外の場合は変数が False に設定されます。 |
|
(オプション)ユーザー定義キーを、コマンド出力の特定のセクションを解析するネストされた Table の名前にマップするキーと値のペアの連想配列 (ディクショナリ)。 |
|
(オプション)で |
|
(オプション)目的のコンテンツに一致する正規表現のリスト。 |
ビュー名
ビュー名は、ビューのユーザー定義識別子です。テーブルを特定のビューに関連付けるには、 view
テーブル定義にプロパティを含め、引数としてビュー名を指定します。
次の例では、Table view
のパラメーターによって参照される という名前のビューChassisFanView
を定義します。
--- ChassisFanTable: command: show chassis fan key: fan-name view: ChassisFanView ChassisFanView: columns: fan-name: Item fan-status: Status fan-rpm: RPM fan-measurement: Measurement
列
ビューのパラメーターを使用して columns
、行と列で書式設定されたコマンド出力を抽出および解析できます。
次のコマンド show ospf neighbor
出力について考えてみます。
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
データを抽出するには、ビューにパラメーターを含め columns
、Python 変数名を列名にマップします。アプリケーションは、その列のコマンド出力から抽出されたキーと値を、指定された項目のディクショナリにキーと値のペアとして格納します。
次のビューは、コマンド出力の各列からデータを抽出します show ospf neighbor
。
--- OspfNeighborTable: command: show ospf neighbor key: Address view: OspfNeighborView OspfNeighborView: columns: neighbor_address: Address interface: Interface neighbor_state: State neighbor_id: ID neighbor_priority: Pri activity_timer: Dead
Junos PyEZアプリケーションでデータを取得して印刷する場合、各ネイバーのデータには列キーと対応するデータが含まれます。
from jnpr.junos import Device from jnpr.junos.command.ospf_neighbor import OspfNeighborTable from pprint import pprint import json with Device(host='router1.example.com') as dev: stats = OspfNeighborTable(dev) stats.get() pprint(json.loads(stats.to_json()))
user@host:~$ python3 junos-pyez-ospf-neighbors.py {'198.51.100.2': {'activity_timer': 39, 'interface': 'ge-0/0/0.0', 'neighbor_address': '198.51.100.2', 'neighbor_id': '192.168.0.2', 'neighbor_priority': 128, 'neighbor_state': 'Full'}, '198.51.100.6': {'activity_timer': 36, 'interface': 'ge-0/0/1.0', 'neighbor_address': '198.51.100.6', 'neighbor_id': '192.168.0.3', 'neighbor_priority': 128, 'neighbor_state': 'Full'}}
選択した列のデータのみを含めるようにデータをフィルター処理するには、ビューにパラメーターを含め filters
ます。詳細については、「 フィルター」を参照してください。
一部のコマンド出力には、次のように複数行にまたがる列タイトルが含まれます。
FI interrupt statistics ----------------------- -------------------------------------------------------------------------------- Stream Total RLIM Total Cell timeout Total Reorder Total cell Total number request PT/MALLOC Ignored cell timeout drops in of times counter Usemeter errors secure mode entered into saturation Drops secure mode -------------------------------------------------------------------------------- 36 0 0 1 1 0 0 128 0 0 1 49 0 0 142 0 0 1 53 0 0 -------------------------------------------------------------------------------- ...
ビューで複数行の列タイトルを定義するには、列キー要素を、そのタイトルの各行の単語のリストと等しく設定します。次のビューは、前のコマンド出力の列を定義しています。
CChipFiStatsTable: command: show mqss {{ chip_instance }} fi interrupt-stats target: fpc8 args: chip_instance: 0 key: Stream view: CChipFiStatsView CChipFiStatsView: columns: stream: Stream req_sat: - Total RLIM - request - counter - saturation cchip_fi_malloc_drops: - Total - PT/MALLOC - Usemeter - Drops cell_timeout_ignored: - Cell timeout - Ignored cchip_fi_cell_timeout: - Total Reorder - cell timeout - errors drops_in_secure: - Total cell - drops in - secure mode times_in_secure: - Total number - of times - entered into - secure mode
評価式(評価)
省略可能 eval
なパラメーターを使用して、Table and View によって返される最終データのキーと値のペアを追加または変更できます。このパラメーターは eval
、Python eval
関数によって評価される数式を含む文字列にキー名をマップします。テーブルとビューの両方にパラメーターを含める eval
ことができ、 eval
複数の値を定義および計算できます。
テーブルで使用すると eval
、計算のために完全なデータディクショナリが参照され、キーと計算値が 1 つの追加項目としてディクショナリに追加されます。ビューで使用すると eval
、データの反復ごとに式が計算され、計算された値がその反復のデータに追加されます。キー名が eval
ビューで定義されたキーと一致する場合、その eval
キーの値を計算値に置き換えます。 eval
キー名がビューで定義されたキーと一致しない場合は、 eval
新しいキーと計算値をデータに追加します。
式は eval
、 data
View によって返されるディクショナリを参照できます。式はJinjaテンプレート変数を使用して参照 data
する必要があります。Junos PyEZが式の評価時に変数を辞書に置き換えることができるようにするためです。
次の例では、ビュー定義で使用します eval
。エントリは cpu
データディクショナリ内の各項目のフィールドの既存の値 cpu
を変更し、エントリは max
データディクショナリ内の各項目に対して新しいキーと値のペアを作成します。
--- FPCThread: command: show threads target: Null key: Name view: FPCThreadView FPCThreadView: columns: pid-pr: PID PR state: State name: Name stack: Stack Use time: Time (Last/Max/Total) cpu: cpu eval: cpu: "'{{ cpu }}'[:-1]" max: "('{{ time }}'.split('/'))[1]"
vty コマンドの show threads
次のサンプル出力について考えてみます。
PID PR State Name Stack Use Time (Last/Max/Total) cpu --- -- ------- --------------------- --------- --------------------- 1 H asleep Maintenance 680/32768 0/5/5 ms 0% 2 L running Idle 1452/32768 0/22/565623960 ms 80% 3 H asleep Timer Services 1452/32768 0/7/1966 ms 0% ...
ビューのパラメーターは eval
、パーセント記号 (%) を省略するように各 cpu
エントリを変更します。その結果、データには '0%' ではなく '0' が含まれます。さらに、新しいキー max
、および各項目の計算値を追加します。
'Maintenance': {'cpu': '0', 'max': '5', 'name': 'Maintenance', 'pid-pr': '1 H', 'stack': '680/32768', 'state': 'asleep', 'time': '0/5/5 ms'}, 'Timer Services': {'cpu': '0', 'max': '7', 'name': 'Timer Services', 'pid-pr': '3 H', 'stack': '1452/32768', 'state': 'asleep', 'time': '0/7/1966 ms'}, ...
テーブル定義で使用する例 eval
については、「 評価式 (eval)」を参照してください。
存在
View でオプションの exists
パラメーターを使用して、コマンド出力に文字列が存在するかどうかを示すことができます。 exists
は、ユーザー定義の Python 変数名をコマンド出力で照合する文字列にマッピングするキーと値のペアのディクショナリです。文字列が出力に存在する場合、変数はに設定されます True
。それ以外の場合、変数は False
に設定されます。
show host_loopback status-summary
vty コマンドの出力について考えてみます。
SENT: Ukern command: show host_loopback status-summary Host Loopback Toolkit Status Summary: No detected wedges No toolkit errors
次の表では、コマンド出力に文字列またはNo toolkit errors
文字列が含まれているNo detected wedges
かどうかをテストするために定義しますexists
。
--- HostlbStatusSummaryTable: command: show host_loopback status-summary target: fpc1 view: HostlbStatusSummaryView HostlbStatusSummaryView: exists: no_detected_wedges: No detected wedges no_toolkit_errors: No toolkit errors
テーブルとビューを使用して文字列をテストし、Junos PyEZアプリケーションで結果の値を出力する場合、この場合、両方の変数が に設定されます True
。
{'no_detected_wedges': True, 'no_toolkit_errors': True}
フィールド
コマンド出力は長く複雑になる可能性があり、出力のさまざまなセクションを解析するために異なるロジックが必要になる場合があります。場合によっては、単一のテーブルとビューを使用してコマンド出力を適切に解析できないことがあります。このタイプの出力を解析するには、ビューにオプションの fields
パラメーターを含めることができます。 fields
は、ユーザー定義キーを、コマンド出力の特定のセクションを選択するネストされた Table の名前にマップするキーと値のペアのディクショナリです。入れ子になった各テーブルは、そのテーブルによって選択されたデータを解析するために使用される独自のビューを参照できます。
show xmchip 0 pt stats
2つの異なるデータセクションを持つvtyコマンド出力を考えてみましょう。
SENT: Ukern command: show xmchip 0 pt stats WAN PT statistics (Index 0) --------------------------- PCT entries used by all WI-1 streams : 0 PCT entries used by all WI-0 streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all WI-1 streams : 0 CPT entries used by all WI-0 streams : 0 CPT entries used by all LI streams : 0 Fabric PT statistics (Index 1) ------------------------------ PCT entries used by all FI streams : 0 PCT entries used by all WI (Unused) streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all FI streams : 0 CPT entries used by all WI (Unused) streams : 0 CPT entries used by all LI streams : 0
次のXMChipStatsView
ビューでは、パラメーターを使用してfields
、コマンド出力の 2 つの異なるセクションを解析するために使用される 2 つの追加のテーブルを定義します。と テーブルは_WANPTStatTable
、それぞれ セクションと Fabric PT statistics
セクションからWAN PT statistics
データを抽出_FabricPTStatTable
します。この場合、テーブルはパラメーターを使用してdelimiter
データを抽出および分割するため、別のビューを参照する必要はありません。
XMChipStatsTable: command: show xmchip 0 pt stats target: fpc1 view: XMChipStatsView XMChipStatsView: fields: wan_pt_stats: _WANPTStatTable fabric_pt_stats: _FabricPTStatTable _WANPTStatTable: title: WAN PT statistics (Index 0) delimiter: ":" _FabricPTStatTable: title: Fabric PT statistics (Index 1) delimiter: ":"
Junos PyEZアプリケーションでデータを取得して印刷する場合、 で fields
定義された各キーには、対応するテーブルによって選択および解析されたデータが含まれます。
{'fabric_pt_stats': {'CPT entries used by all FI streams': 0, 'CPT entries used by all LI streams': 0, 'CPT entries used by all WI (Unused) streams': 0, 'CPT entries used by all multicast packets': 0, 'PCT entries used by all FI streams': 0, 'PCT entries used by all LI streams': 0, 'PCT entries used by all WI (Unused) streams': 0}, 'wan_pt_stats': {'CPT entries used by all LI streams': 0, 'CPT entries used by all WI-0 streams': 0, 'CPT entries used by all WI-1 streams': 0, 'CPT entries used by all multicast packets': 0, 'PCT entries used by all LI streams': 0, 'PCT entries used by all WI-0 streams': 0, 'PCT entries used by all WI-1 streams': 0}}
別の例として、vty コマンドの出力を考えてみましょう show ttp statistics
。
TTP Statistics: Receive Transmit ---------- ---------- L2 Packets 4292 1093544 L3 Packets 542638 0 Drops 0 0 Netwk Fail 0 0 Queue Drops 0 0 Unknown 0 0 Coalesce 0 0 Coalesce Fail 0 0 TTP Transmit Statistics: Queue 0 Queue 1 Queue 2 Queue 3 ---------- ---------- ---------- ---------- L2 Packets 1093544 0 0 0 L3 Packets 0 0 0 0 TTP Receive Statistics: Control High Medium Low Discard ---------- ---------- ---------- ---------- ---------- L2 Packets 0 0 4292 0 0 L3 Packets 0 539172 3466 0 0 Drops 0 0 0 0 0 Queue Drops 0 0 0 0 0 Unknown 0 0 0 0 0 Coalesce 0 0 0 0 0 Coalesce Fail 0 0 0 0 0 TTP Receive Queue Sizes: Control Plane : 0 (max is 4473) High : 0 (max is 4473) Medium : 0 (max is 4473) Low : 0 (max is 2236) TTP Transmit Queue Size: 0 (max is 6710)
ビューは FPCTTPStatsView
、 fields
このパラメーターを使用して、出力のさまざまなセクションのデータを抽出する複数の入れ子になったテーブルを参照します。各テーブルは、独自のビューを参照するか、 delimiter
パラメーターを使用してそのセクションのデータを解析します。
--- FPCTTPStatsTable: command: show ttp statistics target: fpc2 view: FPCTTPStatsView FPCTTPStatsView: fields: TTPStatistics: _FPCTTPStatisticsTable TTPTransmitStatistics: _FPCTTPTransmitStatisticsTable TTPReceiveStatistics: _FPCTTPReceiveStatisticsTable TTPQueueSizes: _FPCTTPQueueSizesTable _FPCTTPStatisticsTable: title: TTP Statistics view: _FPCTTPStatisticsView _FPCTTPStatisticsView: columns: rcvd: Receive tras: Transmit _FPCTTPTransmitStatisticsTable: title: TTP Transmit Statistics view: _FPCTTPTransmitStatisticsView _FPCTTPTransmitStatisticsView: columns: queue0: Queue 0 queue1: Queue 1 queue2: Queue 2 queue3: Queue 3 filters: - queue2 _FPCTTPReceiveStatisticsTable: title: TTP Receive Statistics key: name key_items: - Coalesce view: _FPCTTPReceiveStatisticsView _FPCTTPReceiveStatisticsView: columns: control: Control high: High medium: Medium low: Low discard: Discard _FPCTTPQueueSizesTable: title: TTP Receive Queue Sizes delimiter: ":"
Junos PyEZアプリケーションでデータを取得して印刷すると、各 fields
キーには対応するTableによって抽出および解析されたデータが含まれます。
{'TTPQueueSizes': {'Control Plane': '0 (max is 4473)', 'High': '0 (max is 4473)', 'Low': '0 (max is 2236)', 'Medium': '0 (max is 4473)'}, 'TTPReceiveStatistics': {'Coalesce': {'control': 0, 'discard': 0, 'high': 0, 'low': 0, 'medium': 0, 'name': 'Coalesce'}}, 'TTPStatistics': {'Coalesce': {'name': 'Coalesce', 'rcvd': 0, 'tras': 0}, 'Coalesce Fail': {'name': 'Coalesce Fail', 'rcvd': 0, 'tras': 0}, 'Drops': {'name': 'Drops', 'rcvd': 0, 'tras': 0}, 'L2 Packets': {'name': 'L2 Packets', 'rcvd': 4292, 'tras': 1093544}, 'L3 Packets': {'name': 'L3 Packets', 'rcvd': 542638, 'tras': 0}, 'Netwk Fail': {'name': 'Netwk Fail', 'rcvd': 0, 'tras': 173}, 'Queue Drops': {'name': 'Queue Drops', 'rcvd': 0, 'tras': 0}, 'Unknown': {'name': 'Unknown', 'rcvd': 0, 'tras': 0}}, 'TTPTransmitStatistics': {'L2 Packets': {'queue2': 0}, 'L3 Packets': {'queue2': 0}}}
フィルター
このパラメーターは columns
、行と列で書式設定されたコマンド出力からデータを抽出します。ビューにパラメーターを含める columns
場合、必要に応じてパラメーターを含めて filters
、最終出力に含める列データをフィルター処理できます。このパラメータは filters
、で columns
定義された 1 つ以上のキーのリストを定義します。最終的なデータ セットには、選択した列のデータのみが含まれます。ビュー定義でデフォルトのフィルターを指定し、Junos PyEZアプリケーションでフィルター値を定義またはオーバーライドすることもできます。
コマンドの出力について考え show ospf neighbor
てみます。
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
次のビューでは、パラメーターはcolumns
対応するコマンド出力のすべての列のキーを定義しますが、パラメーターにはfilters
データ ディクショナリ内の 列とState
列のデータAddress
のみが含まれます。
--- OspfNeighborFiltersTable: command: show ospf neighbor key: Address view: OspfNeighborFiltersView OspfNeighborFiltersView: columns: neighbor_address: Address interface: Interface neighbor_state: State neighbor_id: ID neighbor_priority: Pri activity_timer: Dead filters: - neighbor_address - neighbor_state
次のJunos PyEZコードは、最初に引数を指定せずに呼び出し get()
、ビューで定義されたデフォルトのフィルターリストを使用してデータを取得します。2 回目の to get()
呼び出しには、ビューで定義されているフィルター リストをオーバーライドする引数が含まれます filters
。
from jnpr.junos import Device from Tables.show_ospf_neighbor_filter import OspfNeighborFiltersTable from pprint import pprint import json with Device(host='router1.example.com') as dev: stats = OspfNeighborFiltersTable(dev) stats.get() pprint(json.loads(stats.to_json())) print('\n') stats.get(filters=['neighbor_address', 'neighbor_id', 'neighbor_state']) pprint(json.loads(stats.to_json()))
アプリケーションを実行すると、最初の to get()
呼び出しではビューで定義されたフィルターが使用され、2 番目の呼び出しでは呼び出しで定義されたフィルターが使用され、ビューで定義されたフィルターがオーバーライドされます。
user@host:~$ python3 junos-pyez-ospf-filters.py {'198.51.100.2': {'neighbor_address': '198.51.100.2', 'neighbor_state': 'Full'}, '198.51.100.6': {'neighbor_address': '198.51.100.6', 'neighbor_state': 'Full'}} {'198.51.100.2': {'neighbor_address': '198.51.100.2', 'neighbor_id': '192.168.0.2', 'neighbor_state': 'Full'}, '198.51.100.6': {'neighbor_address': '198.51.100.6', 'neighbor_id': '192.168.0.3', 'neighbor_state': 'Full'}}
Regex
View のオプションの regex
パラメーターを使用して、コマンド出力の特定のフィールドを照合および抽出できます。 regex
は、キーを正規表現にマッピングするディクショナリです。対応する テーブルに が定義され item: '*'
ていない場合、Junos PyEZ は正規表現を組み合わせ、出力の各行と結果を照合します。ただし、テーブルでデータを単一のテキスト文字列として抽出するように定義されている item: '*'
場合、Junos PyEZは代わりに個々の正規表現をテキスト文字列全体と照合します。
正規表現で定義されたキャプチャグループによって、フィールドから抽出されてデータディクショナリに格納されるデータが決まります。キャプチャ グループを定義すると、そのグループの値のみがデータに格納されます。それ以外の場合、Junos PyEZは完全な式に一致する値を格納します。たとえば、 (d+.d+)
は文字列検索式から浮動小数点値を取得して格納しますが、 (d+).d+
データの整数部分のみを格納します。複数のグループを定義した場合は、最初のグループの値のみが格納されます。
Junos PyEZは、 pyparsing
モジュールを利用して、正規表現の代わりに使用できるいくつかの組み込みキーワードを定義します。 表 2 に、キーワード、簡単な説明、対応する式を示します。ここで pp
、 は から import pyparsing as pp
派生しています。
キーワード |
説明 |
式 |
---|---|---|
|
16 進文字のみを含む単語 |
hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1)) & pp.OneOrMore(pp.Word('abcdefABCDEF', min=1)) |
|
整数または浮動小数点値で構成されるワード |
numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') + pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i)) |
|
数字と末尾のパーセント記号 (%) で構成される単語 |
percentage = pp.Word(pp.nums) + pp.Literal('%') |
|
印刷可能な文字 (空白以外の文字) で構成される 1 つ以上の単語 |
printables = pp.OneOrMore(pp.Word(pp.printables)) |
|
英数字または英数字で構成される単語 |
word = pp.Word(pp.alphanums) | pp.Word(pp.alphas) |
|
1 つ以上の |
words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i)) |
次のコマンド show icmp statistics
出力について考えてみます。出力の各セクションは特定のセクション タイトルの下にあり、データは数値と 1 つ以上の単語で構成されます。
ICMP Statistics: 0 requests 0 throttled 0 network unreachables 0 ttl expired 0 redirects 0 mtu exceeded 0 source route denials 0 filter prohibited 0 other unreachables 0 parameter problems 0 ttl captured 0 icmp/option handoffs 0 igmp v1 handoffs 0 tag te requests 0 tag te to RE ICMP Errors: 0 unknown unreachables 0 unsupported ICMP type 0 unprocessed redirects 0 invalid ICMP type 0 invalid protocol 0 bad input interface 0 bad route lookup 0 bad nh lookup 0 bad cf mtu 0 runts ICMP Discards: 0 multicasts 0 bad source addresses 0 bad dest addresses 0 IP fragments 0 ICMP errors 0 unknown originators ICMP Debug Messages: 0 throttled ICMP Rate Limit Settings: 500 pps per iff 1000 pps total
前の出力を解析するために、メインビューは fields
、出力の各セクションを解析するネストされたテーブルとビューを参照する を定義します。ネストされたビューは、 regex
対応する Table によって抽出されたデータと照合するパラメーターを定義します。
--- ICMPStatsTable: command: show icmp statistics target: fpc1 view: ICMPStatsView ICMPStatsView: fields: discards: _ICMPDiscardsTable errors: _ICMPErrorsTable rate: _ICMPRateTable _ICMPDiscardsTable: title: ICMP Discards key: name view: _ICMPDiscardsView _ICMPDiscardsView: regex: value: \d+ name: '(\w+(\s\w+)*)' _ICMPErrorsTable: title: ICMP Errors key: name view: _ICMPErrorsView _ICMPErrorsView: regex: error: numbers name: words _ICMPRateTable: title: ICMP Rate Limit Settings key: name view: _ICMPRateView _ICMPRateView: regex: rate: numbers name: words
たとえば、テーブルは _ICMPDiscardsTable
、コマンド出力のセクション ICMP Discards
の下のデータを選択します。ビューでは _ICMPDiscardsView
、 value
name
正規表現にマッピングされる と の2つのキーが定義されています。 value
は、1 つ以上の数字に一致し name
、1 つ以上の単語に一致します。表では が定義され item: '*'
ていないため、正規表現は結合され、そのセクションの各データ行と照合されます。
_ICMPDiscardsTable: title: ICMP Discards key: name view: _ICMPDiscardsView _ICMPDiscardsView: regex: value: \d+ name: '(\w+(\s\w+)*)'
テーブルは _ICMPErrorsTable
、コマンド出力のセクションの下の ICMP Errors
データを選択します。ビューは _ICMPErrorsView
、 error
および name
キーを定義し、正規表現を明示的に定義する代わりに、組み込みキーワード numbers
および words
を使用します。
_ICMPErrorsTable: title: ICMP Errors key: name view: _ICMPErrorsView _ICMPErrorsView: regex: error: numbers name: words
Table で が定義され item: '*'
ている場合、抽出されたデータは 1 つのテキスト文字列と見なされます。この場合、対応するビューの各正規表現は文字列全体と照合されます。
show ithrottle id 0
コマンドの出力について考えてみます。
SENT: Ukern command: show ithrottle id 0 ID Usage % Cfg State Oper State Name -- ------- --------- ---------- -------- 0 50.0 1 1 TOE ithrottle Throttle Times: In hptime ticks In ms --------------- ------ Timer Interval 333333 5.000 Allowed time 166666 2.500 Allowed excess 8333 0.125 Start time 488655082 n/a Run time this interval 0 0.000 Deficit 0 0.000 Run time max 17712 0.266 Run time total 144154525761 2162317 Min Usage Perc: 25.0 Max Usage Perc: 50.0 AdjustUsageEnable: 1 Throttle Stats: Starts : 65708652 Stops : 65708652 Checks : 124149442 Enables : 0 Disables : 0 AdjUp : 6 AdjDown : 4
次の Table では、データを 1 つの文字列として抽出するために使用します item: '*'
。ビューのパラメーターは regex
、3 つの正規表現を定義します。各正規表現パターンは、文字列全体に対して照合されます。正規表現ではキャプチャ グループが定義されるため、Junos PyEZ はグループに一致するデータのみを保存します。
IthrottleIDTable: command: show ithrottle id {{ id }} args: id: 0 item: '*' target: fpc1 view: IthrottleIDView IthrottleIDView: regex: min_usage: 'Min Usage Perc: (\d+\.\d+)' max_usage: 'Max Usage Perc: (\d+\.\d+)' usg_enable: 'AdjustUsageEnable: (\d)' fields: throttle_stats: _ThrottleStatsTable _ThrottleStatsTable: title: Throttle Stats delimiter: ":"
Junos PyEZアプリケーションでデータを取得して印刷すると、データにはその式のキャプチャグループに一致する値を含む3つの regex
アイテムが含まれます。
{'max_usage': 50.0, 'min_usage': 25.0, 'throttle_stats': {'AdjDown': 4, 'AdjUp': 6, 'Checks': 124149442, 'Disables': 0, 'Enables': 0, 'Starts': 65708652, 'Stops': 65708652}, 'usg_enable': 1}