非構造化出力を解析する Junos PyEZ 操作テーブルのビューを定義します。
非構造化出力用のJunos PyEZ運用(op)テーブルは、Junosデバイスで実行されたCLIコマンドまたは特定のFPC(フレキシブルPICコンセントレータ)で実行されたvtyコマンドのテキスト出力からデータを抽出します。テーブル はビューに関連付けられており、ビューはテーブルアイテムのフィールドにアクセスし、ユーザー定義のPython変数にマップするために使用されます。テーブルを特定のビューに関連付けるには、ビュー名を引数として受け取る view プロパティをテーブル定義に含めます。
ビューは、ユーザー定義変数を選択したテーブル項目のデータにマップします。ビューを使用すると、Python で操作できるプロパティを持つ変数として出力内の特定のフィールドにアクセスできます。Junos PyEZは、Pythonへのデータの抽出や、型変換やデータ正規化を処理します。ビューで定義されるキーは、有効なPython変数名である必要があります。
このトピックでは、ビューのさまざまなコンポーネントについて説明します。
非構造化出力を解析するためのビューのパラメーターの概要
Junos PyEZビューは、テーブルと同様に、YAMLを使用してフォーマットされます。非構造化出力を解析するビューには、多数のパラメーターを含めることができます。 表1は 、パラメーターを要約したものです。
|
パラメータを表示 |
説明 |
|---|---|
|
表示名 |
ビューのユーザー定義識別子。 |
|
|
(オプション)コマンド出力の列タイトルのリスト。 |
|
|
(オプション)ユーザー定義のキーを数学式を含む文字列にマップする 1 つ以上のキーと値のペアの連想配列または辞書。式は、データの反復ごとに評価されます。キーと計算された値は、その反復に対応するデータに追加されます。 |
|
|
(オプション)ユーザー定義のキーを文字列にマップするキーと値のペアの連想配列または辞書。文字列が出力に存在する場合、変数はTrueに設定され、それ以外の場合、変数はFalseに設定されます。 |
|
|
(オプション)ユーザー定義のキーを、コマンド出力の特定のセクションを解析するネストされたテーブルの名前にマップするキーと値のペアの連想配列または辞書。 |
|
|
(オプション) |
|
|
(オプション)目的のコンテンツに一致する正規表現のリスト。 |
表示名
ビュー名は、ビューのユーザー定義識別子です。テーブルを特定のビューに関連付けるには、テーブル定義に 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)
オプションの 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 を使用します。 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 }}[4:12]"
以下の show threads vty コマンドの出力例について考えてみましょう。
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 ms',
'name': 'Maintenance',
'pid-pr': '1 H',
'stack': '680/32768',
'state': 'asleep',
'time': '0/5/5 ms'},
'Timer Services': {'cpu': '0',
'max': '7 ms',
'name': 'Timer Services',
'pid-pr': '3 H',
'stack': '1452/32768',
'state': 'asleep',
'time': '0/7/1966 ms'},
...
テーブル定義で eval を使用する例については、 評価式(eval)を参照してください。
存在します
ビューでオプションの 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 detected wedges文字列またはNo toolkit errors文字列のどちらが含まれているかをテストする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 は、ユーザー定義のキーを、コマンド出力の特定のセクションを選択するネストされたテーブルの名前にマップするキーと値のペアの辞書です。ネストされた各テーブルは、そのテーブルによって選択されたデータを解析する独自のビューを参照できます。
2 つの異なるデータ セクションを含む show xmchip 0 pt stats 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 テーブルと _FabricPTStatTable テーブルは、それぞれ WAN PT statistics セクションと Fabric PT statistics セクションからデータを抽出します。この場合、テーブルは 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}}
別の例として、 show ttp statistics vtyコマンドの出力について考えてみましょう。
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 キーには、対応するテーブルによって抽出および解析されたデータが含まれます。
{'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 パラメーターは、対応するコマンド出力のすべての列のキーを定義します。included filters パラメーターを使用すると、結果のデータ ディクショナリには Address 列と State 列のデータのみが含まれます。
---
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() を呼び出し、ビューで定義されたフィルターのデフォルト リストを使用してデータを取得します。 get() の 2 番目の呼び出しには、ビューで定義されているフィルター リストをオーバーライドする 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()))
アプリケーションを実行するとき、 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 パラメーターを使用して、コマンド出力の特定のフィールドを照合して抽出できます。 regex は、キーを正規表現にマッピングする辞書です。対応するテーブルで item: '*'が定義されていない場合、PyEZ Junos正規表現を組み合わせ、結果を出力の各行と照合します。ただし、テーブルがデータを単一のテキスト文字列として抽出する item: '*' を定義する場合、Junos PyEZは代わりに個々の正規表現をテキスト文字列全体と照合します。
正規表現で定義されたキャプチャグループによって、フィールドから抽出され、データディクショナリに格納されるデータが決まります。キャプチャグループを定義すると、そのグループの値のみがデータに保存されます。それ以外の場合、Junos PyEZは完全な式に一致する値を格納します。たとえば、 (d+.d+) は文字列検索式から浮動小数点値を取得して格納しますが、 (d+).d+ はデータの整数部分のみを格納します。複数のグループを定義する場合は、最初のグループの値のみが保存されます。
Junos PyEZ は、 pyparsing モジュールを活用して、正規表現の代わりに使用できるいくつかの組み込みキーワードを定義します。 表3は 、キーワード、簡単な説明、および対応する式を示しています。ここで、 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 パラメーターを定義します。
---
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 ビューでは、正規表現にマッピングされる2つのキー( value と name)を定義します。 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
テーブルで 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
次の表では、 item: '*' を使用してデータを 1 つの文字列として抽出します。ビューの 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}
変更履歴テーブル
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がお使いのプラットフォームでサポートされているかどうかを確認します。
eval ステートメントで使用される式は、制限された実装を使用して評価されます。