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コマンド、または特定の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テーブルを定義しています。

コマンド

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

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

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

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

コマンド引数 (引数)

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

テンプレート変数のデフォルト値を定義するには、テーブル定義にパラメーターを含めargs、各テンプレート変数をデフォルト値にマップします。次の表は、1 つの変数 を持つ Jinja テンプレートを使用するコマンドを定義していますprotocol。このパラメータはargs、スクリプトでメソッドを呼び出しget()、そのデフォルトをオーバーライドする引数を指定しない場合に使用される のprotocolデフォルト値を定義します。

さらに、引数を args Table の get() メソッドのディクショナリとして定義して、次のことができます。

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

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

次の例では、前の表のコマンドを実行し、デフォルト値の 'ospf' の代わりにプロトコル 'bgp' を使用します。

ターゲットFPC(fpc)

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

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

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

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

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

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

vty コマンドの show devices local 次の出力を考えてみます。

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

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

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

テーブル項目キー (キー)

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

次の show chassis fan 出力について考えてみます。

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

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

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

選択したキー (key_items)

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

次の show chassis fan 出力について考えてみます。

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

Junos PyEZアプリケーションでは、key_itemsテーブルで定義されたものkey_itemsを返す、またはオーバーライドする定義を定義するには、テーブルのget()メソッドの引数をkey_items目的の項目のリストまたはタプルに設定します。

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

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

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

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

フィールド区切り文字 (区切り文字)

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

vty コマンドの show link stats 次の出力について考えてみます。

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

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

評価式(評価)

省略可能 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で、その値は割り込み回数の合計です。

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

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

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