Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Junos OSを実行するデバイスでYANG RPC出力をカスタマイズする

Junos OS を実行するデバイス用に YANG でカスタム RPC を作成できます。これにより、Junos OS を実行するデバイス上の特定の運用タスクに対して、入力パラメーターと操作、出力フィールドと書式を正確に定義できます。

Junos OS を実行しているデバイスで RPC を実行すると、RPC の返信が XML ドキュメントとして返されます。Junos OS出力定義言語(ODL)は、CLIでコマンドを実行するか、テキスト形式でRPC出力を要求した場合に表示されるフォーマット済みASCII出力へのXMLデータの変換を定義します。Junos OS ODL 拡張モジュールは、Junos OS ODL の YANG 拡張を定義します。この拡張機能は、カスタム RPC に含めて、出力の CLI フォーマットを指定できます。RPCステートメント内のすべてのステートメントとその配置の概要については、 RPC output 出力をフォーマットするためのJunos OS YANG拡張についてを参照してください。

メモ:

Junos OS リリース 17.3 以降、カスタム RPC の CLI フォーマットは extension ステートメント内で junos-odl:format 定義されます。以前のリリースでは、 ステートメントを含むコンテナを使用してCLIフォーマットが junos-odl:cli-format 定義されています。

以下のセクションでは、Junos OS ODL 拡張ステートメントの使用方法について概要を説明します。密接に関連するステートメントが同じセクションに表示され、場合によっては複数のセクションにステートメントが含まれることがあります。この例では、同封の YANG モジュールが Junos OS ODL 拡張モジュールをインポートし、プレフィックスに junos-odl バインドすることを想定しています。この例では、Junos OS リリース 17.3 で導入された ステートメントを使用 format して、CLI のフォーマットを定義しています。

空白行

RPC 応答が複数のエンティティに対して同じ情報セットを返す場合、ステートメントは blank-line データの各繰り返しの間に 1 行を挿入します。例えば、RPC 応答が複数のインターフェースのデータを返す場合、フォーマットされた ASCII 出力は各インターフェースのデータ・セットの間にブランク行を挿入します。

各エンティティのデータセットの間に空白行を挿入するには、 ステートメントの下に blank-line 直接ステートメントを format 含めます。

大文字

ステートメントはcapitalize、出力フィールド内のノードの値の最初の単語を大文字にします。ノードの正式名称の大文字化には影響しません。例えば、RPC 出力に 値onlinecapitalizestate持つノードが含まれている場合、 ステートメントは出力で値を大文字に変換します。

ノードの値の最初の単語を大文字にするには、 ステートメント内に ステートメントをcapitalizeformat含めます。ステートメントの配置は、ステートメントのスコープ、およびステートメントが単一フィールド、1行のすべてのフィールド、またはすべての行に影響を与えるかどうかを決定します。

cli-format

Junos OS を実行しているデバイスで RPC を実行すると、RPC の返信が XML ドキュメントとして返されます。RPC ステートメントの下のコンテナー ノードとリーフ ノードは、RPC output 応答で XML 要素に変換されます。Junos OS を実行するデバイスの YANG RPC では、Junos OS CLI(コマンドライン インターフェイス)で RPC を実行したり、RPC 出力をテキスト形式で要求したりするときに表示されるカスタム形式の ASCII 出力を定義することもできます。

Junos OSリリース17.2以前のリリースでは、特定のRPC出力コンテナに対してカスタムコマンド出力を作成するには、 ステートメントを含む子コンテナを cli-format 作成します。ステートメントは cli-format 、外側のコンテナが親コンテナのCLIフォーマットを定義しており、このコンテナをRPC応答のXMLデータのノードとして含めないことを示しています。フォーマット・コンテナー内で、親コンテナーのデータを出力フィールドにマップし、Junos OS ODL 拡張モジュールのステートメントを使用して、その親コンテナーの出力を表示する方法を指定します。

Junos OS リリース 17.3 以降のリリースで、特定の RPC 出力コンテナ用のカスタム コマンド出力を作成するには、 形式を参照してください。

コロン、正式名、そして業界をリードする

ノードの正式名(ラベル)は、ノードの出力フィールドの書式設定手順に ステートメントが含まれている場合 leading 、出力内のノードのコンテンツの前にあるテキストです。ノードのラベルを作成するには、リーフノードの定義に ステートメントを含める formal-name 必要があります。次の例では、 version ノードの正式な名前 Versionは次のとおりです。

ステートメントはcolon、出力フィールドのノードのラベルの後にコロンを挿入します。フォーマット命令に および leading ステートメントの両方がcolon含まれている場合、ノードのラベルとコロンは、出力でノードの値の前に挿入されます。例えば:

出力フィールドにラベルとコロンを挿入するには、 ステートメント内に leading および colon ステートメントを format 含めます。ステートメントの配置によって、範囲と、ステートメントが単一のフィールド、1 行のすべてのフィールド、またはすべての行に影響を与えるかどうかが決まります。

RPC を実行すると、そのフィールドの出力にラベルとコロンが含まれます。

コンマ

ステートメントは comma 、出力でノードの値にコンマを追加します。出力行にコンマ区切りのフィールドを作成するには、 ステートメントと space 組み合わせて使用します。例えば:

出力フィールドにノードの値の後にコンマとスペースを生成するには、 ステートメント内に comma および space ステートメントを format 含めます。ステートメント内の ステートメントの format 配置によって、スコープが決定されます。1 つのフィールド内に ステートメントを配置すると、そのフィールドに対してのみコンマとスペースが生成されます。ステートメントの下にステートメントを format 直接配置すると、すべてのフィールドに書式設定が適用されます。

この例の comma 書式設定手順で ステートメントを省略した場合、フィールドはスペースのみで区切られます。Junos OS は、出力行の最後のフィールドの後に、コンマとスペースを自動的に省略します。

デフォルトテキスト

ステートメントは default-text 、出力フィールドに対応するノードが欠落している場合に表示するテキストを指定します。

フィールドにマッピングされたノードが見つからない場合に、フォーマットされたASCII出力に表示する文字列を定義するには、そのノードの default-text ステートメント内に ステートメントと文字列を field 含めます。

RPC 応答でノードが見つからない場合、CLI 出力にはデフォルトのテキストが表示されます。

メモ:

デバイスは、ノードが欠落している場合にのみデフォルトテキストを表示します。存在するが空のノードのテキストは表示されません。

明示的

ステートメントは explicit 、Junos OS RPC でのみ使用され、カスタム RPC に含めることはできません。

フィールドとライン

および field ステートメントはline、RPC のフォーマットされた ASCII 出力と、その行内のフィールドに行を定義します。これらのステートメントは、 ステートメントと一緒pictureに使用して、厳密な列幅とテキスト位置揃えを定義する、より構造化されたテーブルを作成することもできます。

フォーマットされたASCII出力で行を定義するには、 ステートメント内に line ステートメントを format 含めます。ステートメント内には line 、出力ツリーのリーフノードを行内のフィールドにマッピングするステートメントを含 field めます。 field ステートメントの引数はリーフ識別子です。フィールドは、リーフステートメントを定義したのと同じ順序で出力する必要があります。

以下の RPC の CLI 出力は、3 つの値を持つ 1 行です。および line ステートメント内に他の ODL ステートメントをfield含めることができるので、1 つのフィールドまたはその行内のすべてのフィールドの書式をそれぞれカスタマイズできます。

フィールドラッピングとワードラップ

fieldwrapおよび wordwrap ステートメントを使用すると、行の幅が表示の幅よりも大きい場合に、論理的にコンテンツをラップできます。デフォルトでは、表示のエッジを越えて広がるコンテンツは、単語の境界を気にすることなく、適切なマージンを満たす地点で覆われます。

ステートメントは fieldwrap 、現在の行がディスプレイの右端まで伸びているほど長い場合、フィールドの完全な内容を次の行にラップします。このステートメントを使用しない場合、文字列は適切な改行や一般的なマージンを考慮せずに自動的にラップされます。

以下の出力行を検討してください。

ディスプレイが通常よりも狭い場合、次のサンプル出力に示すように、行は単語の中央で折り返される可能性があります。

フィールドに fieldwrap ステートメントが含まれている場合、フィールド全体が次の行に移動します。

ステートメントは wordwrap 、現在の行が長すぎると、後続の行にマルチワード値のセクションをラップするテーブルの一番右の列でのみ使用されます。これにより、テキストの列が効果的に作成されます。次の例では、 ステートメントは wordwrap 、説明文字列を単語の境界で分割します。

RPC のフォーマット済み ASCII 出力でのラッピング動作を改善するには、各フィールドのフォーマット手順に ステートメントを含 fieldwrap めます。一番右の列をテーブルで囲むには、一番右のフィールドの書式設定のインストラクションに ステートメントを含 wordwrap めます。

フロート、ヘッダー、画像、切り捨て

RPC のフォーマットされた ASCII 出力で、ステートメント、ステートメント、および 1 つ以上lineのステートメントをheader定義することで、テーブルをpicture作成できます。オプションheaderのステートメントは、テーブルの列見出しを定義しますが、一般的なテキストを定義することもできます。ステートメントはpicture、テーブル内の列の配置、位置揃え、幅をグラフィカルに示しています。および field ステートメントはline、テーブル行とそのフィールドを定義します。

ステートメントの picture 引数は、 (@)、(<)未満、(>)より大きい、テーブル列の配置、位置揃え、幅を定義する垂直バー(|)記号を含む文字列です。@ シンボルは、フィールド内の値が使用できる列の左端の位置を定義します。<、>、および |記号はそれぞれ左、右、中央揃えを示しています。<、>、または を繰り返す |シンボルは列の幅を定義します。 表 1 は、シンボルをまとめたものです。列間に 1 つ以上のブランク・スペースを挿入することもできます。

表1:画像ステートメント記号

シンボル

説明

@

フィールド内の値が使用できる列の左端の位置を定義します。

|

フィールドの内容を中心にします。繰り返しシンボルで列の幅を定義します。

<

左はフィールドの内容を正当化します。繰り返しシンボルで列の幅を定義します。

>

フィールドの内容を正当化します。繰り返しシンボルで列の幅を定義します。

以下 picture のステートメントでは、左側揃えの列、中央揃えの列、および幅が 6 文字ずつ 1 つのスペースで区切られた右揃えの列を定義します。

テーブル行を定義するには、 ステートメントを line 含め、リーフノードを行内のフィールドにマッピングします。 field ステートメントの引数はリーフ識別子です。

テーブルフィールドに相互に排他的な値のいずれかを含める必要がある場合は、それぞれの潜在的な値に対してpictureステートメントで@ 記号を繰り返し、最初の値の後に、相互に排他的な値ごとに ステートメント内fieldに ステートメントを含floatめることができます。最初の要素に値がない場合、 ステートメントで後続でfloat可能な要素は、値が返されるまでテストされます。この値は、空白フィールドを残すのではなく、最初の @ シンボルで定義された位置に浮動します。

例えば、以下 picture のステートメントにより、出力は 2 番目の列に相互に排他的な 2 つの値のいずれか 1 つを含めます。

また、特定の float テーブル・フィールドに対応するタグが特定の状況で欠落している可能性があり、余分なブランク・スペースを除去したい場合にも、 ステートメントを使用することができます。

ステートメントは truncate 、フィールドの値が ステートメントで picture 定義された列の幅を超えないことを保証します。ステートメントでは truncate 、フィールドの幅を超えるノードの値内の文字を省略する出力を発生させます。ステートメントが truncate 省略され、出力がフィールドの幅を超えると、完全な内容が表示され、テーブルがゆがむ可能性があります。このステートメントは、特に数字に注意して使用する必要があります。これは、出力で値が切り捨てられているという兆候がないためです。

以下の RPC の CLI フォーマットでは、2 つの列を持つ小さなテーブルが定義されています。フィールドにはcomment、 および truncate ステートメントがfloat含まれます。出力要素にstate値が含まれている場合、値は2列目に配置されます。ただし、出力要素が空の場合state、ノードのcomment値(存在する場合)がテーブルに含まれ、2 番目の列に移動します。コメントがその列の幅を超える場合は、列の幅に合わせて切り捨てられます。

形式

Junos OS を実行しているデバイスで RPC を実行すると、RPC の返信が XML ドキュメントとして返されます。RPC ステートメントの下のコンテナー ノードとリーフ ノードは、RPC output 応答で XML 要素に変換されます。Junos OS を実行するデバイスの YANG RPC では、Junos OS CLI(コマンドライン インターフェイス)で RPC を実行したり、RPC 出力をテキスト形式で要求したりするときに表示されるカスタム形式の ASCII 出力を定義することもできます。

Junos OSリリース17.3以降、特定のRPC出力コンテナに対してカスタムコマンド出力を作成するには、 ステートメントを format 定義します。ステートメントは format 親コンテナのCLIフォーマットを定義し、RPC応答のXMLデータのノードとして含まれていません。ステートメント内で format 、親コンテナのデータを出力フィールドにマッピングし、Junos OS ODL拡張モジュールのステートメントを使用して、親コンテナの出力を表示する方法を指定します。

Junos OS リリース 17.2 以前のリリースで、特定の RPC 出力コンテナ用のカスタム コマンド出力を作成するには、 cli-format を参照してください。

ヘッダーとヘッダーグループ

headerステートメントを使用すると、RPC の書式設定された ASCII 出力のフィールドのセットの前にあるヘッダー文字列を定義できheader-group、同じヘッダー グループ内の 2 つ以上のヘッダーが出力に含まれる場合、ステートメントは最初のヘッダー文字列のみを出力します。

ヘッダー文字列を定義し、ヘッダー グループに関連付けるには、 ステートメント内に それぞれ および header-group ステートメントをformatheaderめます。引数はheader-group、特定のヘッダー グループを識別するユーザー定義文字列です。同じ識別子を持つ ステートメントをheader-group含むすべてのformatステートメントは、同じヘッダー グループに属します。次の例では、ヘッダー グループcolor-tagsformat関連付けられたステートメントを定義します。

複数の format ステートメントが同じヘッダーグループに関連付けられ、これらの2つ以上のステートメントから出力されたタグが出力に存在する場合、CLI出力は検出した最初のヘッダーのみを出力し、そのヘッダーグループに属する後続のヘッダーを抑制します。

RPC の CLI 出力でヘッダー グループの最初のヘッダー文字列のみを出力するには、そのヘッダー グループに header-group 属するすべての format ステートメントと識別子を含めます。次のサンプル RPC output ステートメントは、2 つのコンテナとそのフォーマット ステートメントをヘッダー グループに関連付けます color-tags

次の XML タグを持つ RPC の返信を検討してください。

RPC応答がCLIでレンダリングされ、各formatステートメントに同じheader-groupステートメントが存在する場合、出力には最初のヘッダー文字列のみが出力されます。この場合、識別子を持つred-formatステートメントでformat定義されたヘッダー文字列になります。

ステートメントから ステートメントをheader-groupformat省略した場合、フィールドの各セットに定義されたヘッダー文字列が出力に含まれます。

インデント

ステートメントにより indent 、ヘッダー行以外のステートメントのスコープ内のすべての行が、指定された文字数でインデントされます。

行をインデントするには、 ステートメントを含 indent め、ステートメントの最上位レベルで行をインデントするスペースの数次の format RPC の書式設定された ASCII 出力には、出力に 10 個のスペースがインデントされた行が表示されます。

RPC を実行すると、ヘッダーは正当化されたままで、2 つのフィールドを含む行にはスペースが 10 個インデントされます。

改行なし

ステートメントは no-line-break 、出力が同じタグ名を持つ複数のエンティティを出力する場合、同じ行に複数の値を表示するために使用されます。ステートメントを no-line-break 含めると、繰り返しのフォーマットは同じ行に置かれます。ステートメントを省略した場合、繰り返しのフォーマットは別の行に置かれます。

例えば、すべてのSONETエラーを同じ行に一緒に表示することができます。

同じ出力行内に複数のエンティティのタグを配置するには、そのコンテナの ステートメントに ステートメントをformatno-line-breakめます。

RPC 出力が複数のエンティティを返す場合、出力は繰り返されるフィールドの各セットを同じ行に配置します。

ステートメントを省略した no-line-break 場合、出力は繰り返されるフィールドの各セットをそれ自身の行に配置します。

スペース

ステートメントは space 、RPC のフォーマットされた ASCII 出力でノードの値にスペースを追加します。例えば:

ステートメントは space 、しばしば、 ステートメントと comma 組み合わせて使用され、コンマの後にスペースが続く出力行のフィールドを区切ります。

出力フィールドの値の後にスペースを生成するには、 ステートメント内に space ステートメントを format 含めます。ステートメントの配置は、ステートメントのスコープを決定します。ステートメントを単一フィールド内に配置すると、そのフィールドの後にのみスペースが生成されます。

スタイル

ステートメントは style 、RPC 出力用の複数のフォーマットの 1 つを定義します。ステートメントを style 使用してさまざまな出力レベルを作成する方法の詳細については、 Junosデバイス向けカスタムYANG RPCで異なる出力レベルを定義するを参照してください。

テンプレート

ステートメントは template 、特定のノードの出力フィールドの形式を明示的に定義します。これには、出力文字列と、そのノードの文字列内の値の配置が含まれます。ステートメントが template リーフノードに対して定義されている場合、対応する出力フィールドはテンプレート文字列を自動的に使用します。

ノードのテンプレート文字列を作成するには、ノードの定義に ステートメントをtemplate含め、文字列を定義する必要があります。プレースホルダと%s%d文字列内で、ノードの値の型と配置を定義します。文字列値を挿入し%d、整数値を挿入する場合に使用%sします。例えば:

ノードにステートメントを template 定義すると、そのノードの出力フィールドにはテンプレートテキストが自動的に使用されます。

RPC を実行すると、そのフィールドの出力にテンプレートが使用されます。

メモ:

リーフステートメントで と formal-name ステートメントの両方templateを定義しleading、そのステートメントがそのフィールドの書式設定手順に含まれている場合、出力は ステートメントに定義されたテキストをformal-name使用し、 ステートメントに定義されたtemplateテキストは使用しません。

リリース履歴テーブル
リリース
説明
17.3R1
Junos OS リリース 17.3 以降、カスタム RPC の CLI フォーマットは extension ステートメント内で junos-odl:format 定義されます。以前のリリースでは、 ステートメントを含むコンテナを使用してCLIフォーマットが junos-odl:cli-format 定義されています。