Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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

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

非構造化出力用のJunos PyEZ運用(op)テーブルは、次のテキスト出力からデータを抽出できます。

  • Junosデバイスで実行されるCLIコマンド

  • 特定のフレキシブルPICコンセントレータ(FPC)で実行されるvtyコマンド

抽出されたデータはその後、JSON に変換されます。非構造化出力用のJunos PyEZ opテーブルを使用すると、デバイスの動作状態情報をすばやく取得して分析できます。このテーブルは、XML などの構造化形式では取得できないコマンド出力を解析する必要がある場合に特に役立ちます。

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

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

Junos PyEZテーブルは、YAMLを使用してフォーマットされています。運用テーブルの定義には、必須およびオプションのパラメーターを多数含めることができます。 表1は 、パラメーターを要約したものです。

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

テーブルパラメータ名

テーブルパラメータ

説明

テーブル名

–

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

コマンド

command

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

コマンド引数

args

(オプション)コマンドを Jinja テンプレートとして定義する場合、 args はキーと値のペアの連想配列または辞書です。エントリは、コマンドテンプレートの変数を、テンプレートのレンダリング時に使用されるデフォルト値にマップします。

ターゲットFPC

target

(オプション)vtyコマンドを実行するFPC。

テーブルアイテム

item

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

「*」を指定すると、個々の行ではなく文字列全体を抽出して照合します。

テーブルアイテムキー

key

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

選択したキー

key_items

(オプション)データを返す1つ以上のテーブル項目キーのリスト。

セクションタイトル

title

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

フィールド区切り記号

delimiter

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

評価式

eval

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

テーブルビュー

view

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

TextFSMテンプレート

use_textfsm

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

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

platform

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

テーブル名

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

コマンド

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

例えば、以下の表はデバイス上で show chassis fan コマンドを実行します。

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

コマンドを Jinja テンプレートとして定義する場合は、 args パラメーターも指定する必要があります。 args パラメーターは、テンプレート内の変数をテンプレートのレンダリング時に使用される値にマッピングするキーと値のペアの辞書です。コマンドを Jinja テンプレートとして定義する方法については、「 コマンド引数 (args)」を参照してください。

コマンド引数(引数)

commandパラメーターのCLIまたはvtyコマンドを、コマンド引数の変数を置き換えるJinjaテンプレートとして定義できます。Jinjaテンプレートを使用する場合は、argsパラメーターも定義する必要があります。args パラメーターは、Jinja テンプレートの変数名をテンプレートのレンダリング時に使用される値にマップするキーと値のペアのディクショナリです。テーブル定義でテンプレート変数のデフォルト値を指定したり、Junos PyEZアプリケーションで値を定義したりすることもできます。

テンプレート変数のデフォルト値を定義するには、テーブル定義に args パラメーターを含め、各テンプレート変数をデフォルト値にマップします。次の表は、変数 protocol が 1 つの Jinja テンプレートを使用するコマンドを定義しています。 args パラメーターは、 protocolのデフォルト値を定義します。アプリケーションは、スクリプトで get() メソッドを呼び出すときに既定値を使用し、その既定値をオーバーライドする引数を提供しません。

さらに、Table の get() メソッドで args 引数を辞書として定義して、次のことを行うことができます。

  • テーブルでデフォルト値が定義されていないテンプレート変数の値を定義します

  • 1つ以上のテンプレート変数に対してテーブルで定義されたデフォルト値を上書きする

次の例では、デフォルト値の「ospf」ではなく、プロトコル「bgp」を使用して前の表のコマンドを実行します。

ターゲットFPC(fpc)

Junos PyEZ opテーブルは、特定のFPCでvtyコマンドを実行できます。vtyコマンドを使用する場合、ターゲットFPCを定義するための target パラメーターをテーブルに含める必要があります。 target を Null に設定し、アプリケーション内でターゲットFPCをユーザーに強制的に指定させることができます。または、 target をデフォルトのFPCに設定し、ユーザーはオプションでアプリケーション内でこの値を上書きすることもできます。

次の表では、 show memory vtyコマンドを実行しますが、 target: Nullを設定します。そのため、ユーザーは Junos PyEZ アプリケーションでターゲット FPC を指定する必要があります。

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

Junos PyEZアプリケーションでは、ターゲットFPCを定義したり、テーブルで定義されたデフォルトFPCを上書きすることができます。FPCを指定するには、次に例のように、Tableのget()メソッドのtarget引数を必要なFPCに設定します。

テーブルアイテム(アイテム)

オプションの Table item プロパティは、解析のためにコマンド出力を分割する方法を定義する文字列または正規表現です。出力に類似した繰り返しデータセットがある場合は、照合する item を定義し、データの各反復を抽出できます。たとえば、 show interfaces は多くのインターフェイスについて同様のデータ セットを返します。または、データを 1 つのテキスト ブロックとして抽出する必要がある場合に item: '*' を定義することもできます。

show devices local vtyコマンドの以下の出力について考えてみましょう。

次の表は、 TSEC Ethernet Device Driver:で始まる出力の各セクションを抽出したものです。この場合、 key: name の値は、 itemで定義された正規表現のキャプチャグループから取得されます。

また、各行を一致させるのではなく、出力のセクション全体と一致させたい場合は、 item をアスタリスク('*')として定義することもできます。 item: '*'を含める場合、ほとんどの場合、抽出する出力セクションの見出しを指定する title パラメーターも含める必要があります。 item: '*' を使用して出力を抽出すると、ビューに regex パラメーターを含め、各式をテキスト文字列全体と一致させる場合に便利です。それ以外の場合は、 regex 式が組み合わされ、各行と照合されます。

次の表は、見出し Receive: の下のテキストブロックを抽出し、各正規表現をテキスト文字列全体と照合します。

テーブルアイテムキー(キー)

オプションの key プロパティは、テーブル項目を一意に識別するために使用される出力フィールドを定義します。単一のキーまたはキーのリストを使用して、テーブルアイテムを識別できます。テーブルとビューが反復データを返す場合、 key 値はビューで定義された変数またはフィールド名を参照する必要があります。

次の出力 show chassis fan 考えてみましょう。

次の表では、テーブル項目キーを fan-nameとして定義し、出力の Item 列の下の値にマップします。

Junos PyEZ アプリケーションでデータを取得して出力すると、結果の辞書内の各項目がこのフィールドの値をキーとして使用します。

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

選択したキー(key_items)

key パラメーターは、テーブル アイテムを一意に識別する出力フィールドを定義します。key パラメーターをテーブルに含める場合、オプションの key_items パラメーターを使用して、特定のキー値のデータのみを返すことができます。key_items は、データを取得するテーブル項目のキーまたはキーのリストを定義します。key_itemsパラメーターは、テーブル定義またはJunos PyEZアプリケーションで定義できます。

次の show chassis fan 出力を考えてみましょう。

次の表では、テーブル項目のキーを fan-name として定義し、キー値が Fan 1に等しいテーブル項目のデータのみを取得します。

Junos PyEZアプリケーションでは、返すkey_itemsを定義したり、テーブルで定義されたkey_itemsを上書きしたりできます。Table の get() メソッドの key_items 引数を、目的の項目のリストまたはタプルに設定します。次に例を示します。

セクションタイトル(タイトル)

テーブルには、データの抽出元と解析元となるコマンド出力内のセクションの開始点を定義するオプションの title パラメーターを含めることができます。テーブルで item: '*'を定義する場合は、抽出する出力セクションの見出しを指定する title を含める必要があります

例えば、大きな出力セット内に囲まれた次のコマンド出力を考えてみましょう。

次の表では、 title パラメーターを使用して、出力の TSEC status counters セクションからデータを抽出して解析します。この場合、テーブルは item を「*」と定義し、データを単一のテキスト文字列と見なします。

フィールド区切り記号(区切り記号)

一部の操作コマンドは、キーと値のペアのみで構成される出力を返します。単にデータ セット全体を取得し、各キーと値のペアを抽出する場合は、個別のビューを定義する代わりに delimiter パラメーターを使用できます。 delimiter パラメーターは、各データ ペアを分割する方法を定義します。Junos PyEZは、区切り文字を使用して指定された境界でデータを分割し、各キーと値のペアを辞書に格納します。

show link stats vtyコマンドの以下の出力について考えてみましょう。

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

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

評価式(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は 、サポートされている式の概要を示しています。

表2:eval ステートメントでサポートされている式
カテゴリー サポートされている構文 例文

算術

+ - * / // % **

a+b
a*100

ブール論理

and, or

a > 0 and b > 0

リテラル

整数、浮動小数点数

123
3.14

文字列リテラル

'text'

辞書リテラル

{'a':1}

リテラルを一覧表示する

[1,2,3]

リテラルを設定する

{1,2,3}

タプルリテラル

(1,2,3)

比較
オペレーター

== != < <= > >=

{{ cpu }} > 80

辞書
内包表記

{k:v for ...}

{k:v for k,v in {{ data }}.items()}

リスト
内包表記

[expr for ...]

[v['errors'] for k,v in {{ data }}.items()]

設定
内包表記

{expr for ...}

{k for k in {{ data }}.keys()}

条件式

x if cond else y

'busy' if {{ cpu }} > 80 else 'idle'

機能

abs()—絶対値
dict()- 辞書を作成する
isinstance()- タイプチェック
len()- 反復可能な長さ
max()—最大値
min()- 最小値
sum()—反復可能な値の合計

sum([1,2,3])

ジェネレータ
式

(expr for ...)

(v for v in {{ data }}.values())

インデックス作成

[n]

{{ data }}[0]

メンバーシップ

in, not in

'xe' in {{ name }}

メソッド

endswith()- 文字列サフィックスチェック
get()—辞書の安全な検索
items()- 辞書のキーと値を返します
keys()- 辞書キーを返す
values()- 辞書値を返します

{{ data }}.items()

スライシング

[start:end:step]

'{{ cpu }}'[:-1]

単項演算子

+x、 -x、 not x

-{{ cpu }}

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

また、テーブルに eval を定義して、複数のキーと値のペアを計算して追加することもできます。

ビューでの 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デバイスからのコマンド出力を解析します。

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

変更履歴テーブル

サポートされる機能は、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がお使いのプラットフォームでサポートされているかどうかを確認します。

リリース
説明
2.8.1
Junos PyEZ リリース 2.8.1 以降、Table および View eval ステートメントで使用される式は、制限された実装を使用して評価されます。