Junos XMLプロトコルセッションの運用情報リクエストの出力形式を指定する
Junos XML プロトコル セッションでは、Junos OS を実行しているルーティング、スイッチング、セキュリティ プラットフォームに関する情報を要求するために、クライアント アプリケーションが Junos XML リクエスト タグ要素を <rpc> タグ要素で囲みます。クライアント アプリケーションは、運用要求タグを開く際にオプション format 属性を設定することで、Junos XML プロトコル サーバーから返される出力の書式設定を指定できます。情報は、XMLタグ付き形式、JavaScript Object Notation(JSON)、またはフォーマットされたASCIIテキストとして返すことができます。基本的な構文は次のとおりです。
<rpc>
<operational-request format="(ascii | json | text | xml)">
<!-- tag elements for options -->
</operational-request>
</rpc>
XML 形式
デフォルトでは、Junos XML プロトコル サーバーは XML タグ付き形式で運用情報を返します。属性の format 値が「xml」に設定されている場合、または属性が format 省略された場合、サーバーは XML で応答を返します。次の例では、ge-0/3/0 インターフェイスの情報を要求します。属性は format 省略されます。
<rpc>
<get-interface-information>
<brief/>
<interface-name>ge-0/3/0</interface-name>
</get-interface-information>
</rpc>
Junos XML プロトコル サーバーは、XML タグ付き形式で情報を返します。これは、 操作モード コマンドの後に オプションを使用 | display xml した場合に CLI に表示される出力と同じです。
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/11.4R1/junos">
<interface-information
xmlns="http://xml.juniper.net/junos/11.4R1/junos-interface" junos:style="brief">
<physical-interface>
<name>ge-0/3/0</name>
<admin-status junos:format="Enabled">up</admin-status>
<oper-status>down</oper-status>
<link-level-type>Ethernet</link-level-type>
<mtu>1514</mtu>
<source-filtering>disabled</source-filtering>
<speed>1000mbps</speed>
<bpdu-error>none</bpdu-error>
<l2pt-error>none</l2pt-error>
<loopback>disabled</loopback>
<if-flow-control>enabled</if-flow-control>
<if-auto-negotiation>enabled</if-auto-negotiation>
<if-remote-fault>online</if-remote-fault>
<if-device-flags>
<ifdf-present/>
<ifdf-running/>
<ifdf-down/>
</if-device-flags>
<if-config-flags>
<iff-hardware-down/>
<iff-snmp-traps/>
<internal-flags>0x4000</internal-flags>
</if-config-flags>
<if-media-flags>
<ifmf-none/>
</if-media-flags>
</physical-interface>
</interface-information>
</rpc-reply>
ASCII形式
Junos XMLプロトコルサーバーに、Junos XMLタグ要素でタグ付けするのではなく、フォーマットされたASCIIテキストとして運用情報を返すように要求するために、クライアントアプリケーションには、開始リクエストタグに または format="ascii" 属性が含まれますformat="text"。クライアントアプリケーションは、リクエストをタグ要素で<rpc>囲みます。
<rpc>
<get-interface-information format="(text | ascii)">
<brief/>
<interface-name>ge-0/3/0</interface-name>
</get-interface-information>
</rpc>
クライアントアプリケーションにリクエストタグに format="text" または format="ascii" 属性が含まれている場合、Junos XMLプロトコルサーバーは応答をASCIIテキストとしてフォーマットし、タグ要素で<output>囲みます。および format="ascii" 属性はformat="text"、同一の出力を生成します。
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/11.4R1/junos"> <output> Physical interface: ge-0/3/0, Enabled, Physical link is Down Link-level type: Ethernet, MTU: 1514, Speed: 1000mbps, Loopback: Disabled, Source filtering: Disabled, Flow control: Enabled, Auto-negotiation: Enabled, Remote fault: Online Device flags : Present Running Down Interface flags: Hardware-Down SNMP-Traps Internal: 0x4000 Link flags : None </output> </rpc-reply>
次の例は、CLI で実行される同等の動作モード コマンドを示しています。
user@host> show interfaces ge-0/3/0 brief Physical interface: ge-0/3/0, Enabled, Physical link is Down Link-level type: Ethernet, MTU: 1514, Speed: 1000mbps, Loopback: Disabled, Source filtering: Disabled, Flow control: Enabled, Auto-negotiation: Enabled, Remote fault: Online Device flags : Present Running Down Interface flags: Hardware-Down SNMP-Traps Internal: 0x4000 Link flags : None
Junos XML プロトコル サーバーから返される書式設定された ASCII テキストは、出力に「<」(小数記号)、>(大きい符号)、&(アンパサンド)などの許可されていない文字が含まれている場合を除き、CLI 出力と同じです。Junos XMLプロトコルサーバーは、これらの文字を、それぞれ'<'、'>'、および'&'の同等の事前定義されたエンティティリファレンスに置き換えます。
クライアント・アプリケーションから要求された出力のタイプに対して Junos XML API が応答タグ・エレメントを定義していない場合、Junos XML プロトコル・サーバーは、XML タグ付き出力が要求された場合でも、タグ・エレメントに <output> 囲まれたフォーマット済み ASCII テキストとして応答を返します。
タグ要素の <output> 詳細については、 Junos XML API 運用開発者リファレンスを参照してください。
タグ要素内 <output> のデータのコンテンツと書式設定は変更される可能性があるため、クライアント アプリケーションはそれらに依存する必要はありません。
JSON 形式
Junos OS リリース 14.2 以降、クライアント アプリケーションは JSON 形式で運用情報と設定情報を要求できます。Junos XML プロトコル サーバーが Junos XML タグ要素でタグ付けするのではなく、JSON 形式を使用して運用情報を返すように要求するには、クライアント アプリケーションにリクエストタグを開く属性が含まれています format="json" 。クライアントアプリケーションは、リクエストをタグ要素で <rpc> 囲みます。
<rpc>
<get-interface-information format="json">
<brief/>
<interface-name>cbp0</interface-name>
</get-interface-information>
</rpc>
]]>]]>
クライアントアプリケーションにリクエストタグの属性が format="json" 含まれている場合、Junos XMLプロトコルサーバーは、JSONを使用して返信をフォーマットします。
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/16.1R1/junos">
{
"interface-information" : [
{
"attributes" : {"xmlns" : "http://xml.juniper.net/junos/16.1R1/junos-interface",
"junos:style" : "brief"
},
"physical-interface" : [
{
"name" : [
{
"data" : "cbp0"
}
],
"admin-status" : [
{
"data" : "up",
"attributes" : {"junos:format" : "Enabled"}
}
],
"oper-status" : [
{
"data" : "up"
}
],
"if-type" : [
{
"data" : "Ethernet"
}
],
"link-level-type" : [
{
"data" : "Ethernet"
}
],
"mtu" : [
{
"data" : "1514"
}
],
"speed" : [
{
"data" : "Unspecified"
}
],
"clocking" : [
{
"data" : "Unspecified"
}
],
"if-device-flags" : [
{
"ifdf-present" : [
{
"data" : [null]
}
],
"ifdf-running" : [
{
"data" : [null]
}
]
}
],
"ifd-specific-config-flags" : [
{
"internal-flags" : [
{
"data" : "0x0"
}
]
}
],
"if-config-flags" : [
{
"iff-snmp-traps" : [
{
"data" : [null]
}
]
}
]
}
]
}
]
}
</rpc-reply>
Junos OSリリース17.3R1以降、Junos OSを実行するデバイスは、JSON配列として複数の値を持つオブジェクトのみが出力されるコンパクトなJSON形式でデバイスの運用状態を出力することをサポートしています。コンパクトな JSON 形式を出力するようにデバイスを構成するには、 階層レベルで ステートメントを[edit system export-format state-data json]設定compactします。
user@host# set system export-format state-data json compact
次の例では、コマンドを show system uptime 実行し、コンパクトではないコンパクトな JSON 形式で出力を表示します。
user@host> show system uptime | display json
非コンパクトな JSON 形式:
{
"system-uptime-information" : [
{
"attributes" : {"xmlns" : "http://xml.juniper.net/junos/18.1R1/junos"},
"current-time" : [
{
"date-time" : [
{
"data" : "2018-05-15 13:43:46 PDT",
"attributes" : {"junos:seconds" : "1526417026"}
}
]
}
],
"time-source" : [
{
"data" : " NTP CLOCK "
}
],
"system-booted-time" : [
{
"date-time" : [
{
"data" : "2018-05-15 10:57:02 PDT",
"attributes" : {"junos:seconds" : "1526407022"}
}
],
"time-length" : [
{
"data" : "02:46:44",
"attributes" : {"junos:seconds" : "10004"}
}
]
}
],
"protocols-started-time" : [
{
"date-time" : [
{
"data" : "2018-05-15 10:59:33 PDT",
"attributes" : {"junos:seconds" : "1526407173"}
}
],
"time-length" : [
{
"data" : "02:44:13",
"attributes" : {"junos:seconds" : "9853"}
}
]
}
],
"last-configured-time" : [
{
"date-time" : [
{
"data" : "2018-05-02 17:57:44 PDT",
"attributes" : {"junos:seconds" : "1525309064"}
}
],
"time-length" : [
{
"data" : "1w5d 19:46",
"attributes" : {"junos:seconds" : "1107962"}
}
],
"user" : [
{
"data" : "admin"
}
]
}
],
"uptime-information" : [
{
"date-time" : [
{
"data" : "1:43PM",
"attributes" : {"junos:seconds" : "1526417026"}
}
],
"up-time" : [
{
"data" : "2:47",
"attributes" : {"junos:seconds" : "10034"}
}
],
"active-user-count" : [
{
"data" : "1",
"attributes" : {"junos:format" : "1 user"}
}
],
"load-average-1" : [
{
"data" : "0.49"
}
],
"load-average-5" : [
{
"data" : "0.19"
}
],
"load-average-15" : [
{
"data" : "0.10"
}
]
}
]
}
]
}
同じコマンドのコンパクトな JSON 形式は次のとおりです。
{
"system-uptime-information" :
{
"current-time" :
{
"date-time" : "2018-05-15 13:49:56 PDT"
},
"time-source" : " NTP CLOCK ",
"system-booted-time" :
{
"date-time" : "2018-05-15 10:57:02 PDT",
"time-length" : "02:52:54"
},
"protocols-started-time" :
{
"date-time" : "2018-05-15 10:59:33 PDT",
"time-length" : "02:50:23"
},
"last-configured-time" :
{
"date-time" : "2018-05-15 13:49:40 PDT",
"time-length" : "00:00:16",
"user" : "admin"
},
"uptime-information" :
{
"date-time" : "1:49PM",
"up-time" : "2:53",
"active-user-count" : "1",
"load-average-1" : "0.00",
"load-average-5" : "0.06",
"load-average-15" : "0.06"
}
}
}