Junos OS を実行するデバイスの YANG でのカスタム RPC の作成
ジュニパーネットワークスは、Junos OS 運用コマンドのリモート プロシージャ コール(RPC)を定義する YANG モジュールを提供します。Junos OS リリース 16.1R3 以降では、Junos OS を実行するサポート対象デバイスのカスタム RPC を定義する YANG データ モデルも作成できます。カスタム RPC を作成することで、それらのデバイス上の特定の運用タスクの入力パラメーターと操作と出力フィールドと書式設定を正確に定義できます。カスタム YANG RPC を使用して運用コマンド階層を拡張する場合、RPC のハンドラーとして機能するアクション スクリプトも指定する必要があります。RPC 定義は、RPC の実行時に呼び出されるアクション スクリプトを参照します。
このトピックでは、Junos OS を実行するデバイスのカスタム RPC を定義する YANG モジュールを作成するための一般的な手順について説明します。RPC アクション スクリプトの作成と RPC の CLI 出力のカスタマイズの詳細については、「 Junos OS を実行しているデバイスでの YANG RPC のアクション スクリプトの作成」および「RPC 出力をフォーマットするための Junos OS YANG 拡張機能について」を参照してください。
このセクションでは、Junos OS を実行するデバイスの RPC を定義する YANG モジュールの汎用テンプレートを示します。テンプレートの後に、テンプレートのさまざまなセクションとステートメントの詳細な説明が続きます。
module module-name { namespace "namespace"; prefix prefix; import junos-extension { prefix junos; } import junos-extension-odl { prefix junos-odl; } organization "organization"; description "module-description"; rpc rpc-name { description "RPC-description"; junos:command "cli-command" { junos:action-execute { junos:script "action-script-filename"; } } input { leaf input-param1 { type type; description description; } leaf input-param2 { type type; description description; } // additional leaf definitions } output { container output-container-name { container container-name { leaf output-param1 { type type; description description; // optional formatting statements } // additional leaf definitions junos-odl:format container-name-format { // CLI formatting for the parent container } } // Additional containers } } } }
RPC はモジュール内で定義されます。モジュール名は説明的で、そのモジュールに含まれている RPC の一般的な目的を示す必要があり、モジュールの名前空間は一意である必要があります。
module module-name { namespace "namespace"; prefix prefix; }
RFC 6020、YANG - ネットワーク構成プロトコル(NETCONF)のデータ モデリング言語に従って、モジュール名とモジュールが存在するファイルのベース名は同じである必要があります。たとえば、モジュール名が 、モジュールのファイル名は get-if-info
get-if-info.yang である必要があります。
モジュールは、Junos OS DDL 拡張モジュールをインポートし、プレフィックスを定義する必要があります。この拡張機能モジュールには、Junos OS を実行するデバイスで実行される RPC の定義に必要な YANG 拡張機能が含まれています。
import junos-extension { prefix junos; }
Junos OS リリース 17.4R1 以降、Junos OS YANG モジュールは、モジュールの名前、ファイル名、名前空間に新しい命名規則を使用します。
モジュール内のいずれかの RPC がフォーマットされた ASCII 出力をレンダリングする場合、モジュールは Junos OS ODL 拡張モジュールをインポートし、プレフィックスを定義する必要があります。ODL 拡張モジュールは、CLI で RPC の運用コマンドを実行するとき、または RPC 出力をテキスト形式で要求するときに、出力をレンダリングする方法を正確に指定するために使用する YANG 拡張機能を定義します。
import junos-extension-odl { prefix junos-odl; }
モジュールを担当する組織と、モジュールの説明を含めます。
organization "organization"; description "module-description";
モジュール内では、それぞれ固有の名前を持つ 1 つ以上の RPC を定義できます。RPC 名は RPC をリモートで実行するために使用されるため、RPC の目的を明確に示す必要があります。RPC の目的は、ステートメントで description
さらに明確にできます。RPC の CLI コマンドも定義すると、そのコマンド リストのコンテキスト依存ヘルプに RPC の説明が表示されます。
rpc rpc-name { description "RPC-description"; }
RPC 定義内で、Junos OS DDL 拡張ステートメントである 、 action-execute
、および script
ステートメントを定義command
します。ステートメントはcommand
、Junos OS CLI で RPC を実行するために使用する運用コマンドを定義します。RPC をリモートで実行するには、リクエスト タグに RPC 名を使用します。
ステートメントとscript
サブステートメントはaction-execute
、すべての RPC に対して定義する必要があります。サブステートメントはscript
、RPC の実行時に呼び出されるアクション スクリプトの名前を定義します。RPC ごとに 1 つだけのアクション スクリプトを定義する必要があります。
Junos OSリリース17.3以降、 action-execute
ステートメントは command
.以前の action-execute
リリースでは、and command
ステートメントは同じレベルに配置され command
、ステートメントはオプションです。
Junos OS リリース 17.3 以降で、ステートメントとそのサブステートメントを定義
command
します。junos:command "cli-command" { junos:action-execute { junos:script "action-script-filename"; } }
Junos OS リリース 17.2 以前では、and
script
ステートメントをaction-execute
定義し、必要に応じてステートメントをcommand
定義します。junos:command "cli-command"; junos:action-execute { junos:script "action-script-filename"; }
または request system yang update
コマンドを発行して、新しいまたは既存の YANG パッケージの一部として YANG モジュールおよびアクション スクリプトをデバイスにrequest system yang add
追加する必要があります。したがって、ステートメントのアクション スクリプトjunos:script
のパスではなく、名前を指定するだけで済みます。
アクション スクリプトが Python で作成されている場合は、スクリプトが実行される各デバイスの階層レベルの下[edit system scripts]
で or language python3
ステートメントを設定language python
して、署名されていない Python スクリプトをデバイスで実行できるようにする必要があります。
RPC 操作への入力パラメーターは、オプション input
のステートメント内で定義されます。RPC を実行すると、Junos OS は RPC のアクション スクリプトを呼び出し、すべての入力パラメーターをスクリプトに渡します。
input { leaf input-param1 { type type; description description; } leaf input-param2 { type type; description description; } // additional leaf definitions }
Junos OS リリース 19.2R1 以降、カスタム YANG RPC は、Junos OS CLI で RPC のコマンドを実行する際に、タイプ empty
の入力パラメーターをサポートします。以前のリリースでは、タイプ empty
の入力パラメーターは、NETCONF または Junos XML プロトコル セッションで RPC を実行する場合にのみサポートされています。
オプション output
のステートメントは、出力パラメーターを RPC 操作に囲みます。ステートメントには output
、最上位のルート コンテナーを 1 つ含めることができます。ルート コンテナの名前と RPC 名を相互に関連付けるのが良い方法です。たとえば、RPC 名が 、 の場合、 get-xyz-information
コンテナ名は xyz-information
.ステートメントのサブステートメントは、RPC の output
ノードの下の output
ノードを定義します。XML 出力では、これは要素の下 <rpc-reply>
の XML 要素に変換されます。
output { container output-container-name { ... } }
ルート コンテナ内では、ステートメントをcontainer
含leaf
めることができます。リーフ ステートメントは、そのコンテナの RPC 出力に含まれるデータを記述します。
output { container output-container-name { container container-name { leaf output-param1 { type type; description description; } // additional leaf definitions } } }
デフォルトでは、RPC 出力の形式は XML です。また、CLI でその RPC の運用コマンドを実行するとき、または RPC 出力をテキスト形式で要求したときに表示されるフォーマット済み ASCII 出力を定義することもできます。
Junos OS リリース 17.3 以降、カスタム RPC の CLI フォーマットは、拡張ステートメント内で junos-odl:format
定義されています。以前のリリースでは、ステートメントを含むコンテナを使用して CLI フォーマットが junos-odl:cli-format
定義されています。
Junos OS リリース 17.3 以降では、ステートメント(Junos OS ODL 拡張ステートメント)を定義することで、CLI フォーマットを定義
junos-odl:format
します。output { container output-container-name { container container-name { leaf output-param1 { type type; description description; // optional formatting statements } // additional leaf definitions junos-odl:format container-name-format { // CLI formatting for the parent container } } // Additional containers } }
Junos OS リリース 17.3 より前は、ステートメントを含む子コンテナ内の特定のコンテナの CLI フォーマットを
junos-odl:cli-format
定義します。container container-name-format { junos-odl:cli-format; // CLI formatting for the parent container }
CLI フォーマットを定義するステートメントまたはコンテナー内で、Junos OS ODL 拡張モジュールで定義されたステートメントを使用して、RPC の CLI 出力をカスタマイズできます。フォーマットされたASCII出力のレンダリングの詳細については、「 Junos OSを実行しているデバイス上でYANG RPC出力をカスタマイズする」を参照してください。また、RPC の CLI 出力で特定のコンテナ内のデータが出力されるタイミングを規定することもできます。同じ RPC に対して異なるレベルの出力を構築する方法については、「 Junos OS を実行するデバイスのカスタム YANG RPC で異なる出力レベルを定義する」を参照してください。
Junos OS を実行しているデバイスで RPC を使用するには、次の手順に従います。
- モジュールとアクション スクリプトをデバイスにダウンロードする
- or
request system yang update
operational コマンドを発行して、新しい YANG パッケージまたは既存の YANG パッケージにファイルをrequest system yang add
追加します。 - RPC の実行
- CLI で RPC を実行するには、ステートメントで定義されたコマンドを
junos:command
発行します。 - RPC をリモートで実行するには、RPC リクエスト操作で RPC 名を使用します。
- CLI で RPC を実行するには、ステートメントで定義されたコマンドを
Junos OS リリース 17.3R1 以降では、カスタム YANG データ モデルをデバイスにロードするときに、必要な Junos OS 拡張モジュールを明示的にロードする必要はありません。以前のリリースでは、モジュールを使用するすべてのパッケージの Junos OS 拡張モジュールをロードする必要があります。
ステートメントで定義 junos:command
されたコマンドを発行して CLI で RPC を実行すると、デバイスは RPC によって定義された CLI 形式で RPC 出力を表示します。RPC が CLI フォーマットを定義していない場合、デフォルトでは、その RPC の出力は CLI に表示されません。ただし、フィルターをコマンドに追加することで、その RPC の XML 出力を | display xml
CLI に表示することはできます。
YANG RPC の詳細については、 RFC 6020、 YANG - A Data Modeling Language for the Network Configuration Protocol(NETCONF)、および関連 RFC を参照してください。
empty
の入力パラメーターをサポートします。
action-execute
ステートメントは
command
.
junos-odl:format
定義されています。