CLI で Junos OS コマンド出力を JSON にマッピングする
Junos OS(Junos OS)は、Junos OSを実行するデバイスの操作と設定、およびJunos OSコマンドラインインターフェイス(CLI)とJunos OSインフラストラクチャがXMLを使用して通信するためのXMLをネイティブにサポートしています。動作コマンドを発行するか、CLI で設定を表示すると、CLI は出力を XML から読み取り可能なテキスト形式に変換して表示します。
Junos OS リリース 14.2 以降、Junos OS を実行するデバイスは、運用コマンド出力と Junos OS 設定階層の JSON(JavaScript Object Notation)表現もサポートしています。Junos OS CLI で、デフォルトでフォーマットされたASCIIテキストではなく、コマンドの出力または設定を JSON で表示するには、オプションをコマンドに追加 | display json します。
次の例では、コマンドを show chassis hardware 実行し、出力を JSON 形式で表示します。応答は、RPC 要求の NETCONF または Junos XML プロトコル サーバーの応答と <get-chassis-inventory format="json"> 同じです。
user@host> show chassis hardware | display json
{
"chassis-inventory" : [
{
"attributes" : {
"xmlns" : "http://xml.juniper.net/junos/16.1R1/junos-chassis"
},
"chassis" : [
{
"attributes" : {"junos:style" : "inventory"},
"name" : [
{
"data" : "Chassis"
}
],
"serial-number" : [
{
"data" : "serial-number"
}
],
"description" : [
{
"data" : "MX80-48T"
}
],
"chassis-module" : [
{
"name" : [
{
"data" : "Midplane"
}
],
"version" : [
{
"data" : "REV 11"
}
],
"part-number" : [
{
"data" : "711-031603"
}
],
"serial-number" : [
{
"data" : "serial-number"
}
],
"description" : [
{
"data" : "MX80-48T"
}
],
"clei-code" : [
{
"data" : "CMMAX10BRD"
}
],
"model-number" : [
{
"data" : "CHAS-MX80-48T-S"
}
]
},
//* additional JSON objects *//
]
}
]
}
]
}
Junos OSリリース16.1以降、Junos OSは、JSON形式で出力される設定データのシリアル化に新しいデフォルト実装を使用します。新しいデフォルトは、 ietf次のインターネットドラフトで定義されています。
draft-ietf-netmod-yang-json-09、 YANG でモデル化されたデータの JSON エンコーディング
draft-ietf-netmod-yang-metadata-06,YANG を使用したメタデータの定義と使用
以前のリリースでは、デフォルトは verboseJSON 配列としてすべてのオブジェクトを発行します。適切なステートメントを階層レベルで設定することで、JSON 設定データのデフォルトのエクスポート形式を [edit system export-format json] 設定できます。ステートメントは、以降の verbose リリースまで Junos OS CLI に公開されていない場合でも、Junos OS リリース 16.1R1 以降で設定できます。
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"
}
}
}