非構造化出力を解析する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}