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-infoget-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 updateoperational コマンドを発行して、新しい 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 定義されています。