Asignar salida de comando de Junos OS a JSON en la CLI
El sistema operativo Junos (Junos OS) admite de forma nativa XML para la operación y configuración de dispositivos que ejecutan Junos OS, y la interfaz de línea de comandos (CLI) de Junos OS y la infraestructura de Junos OS se comunican mediante XML. Cuando se emite un comando operativo o se muestra la configuración en la CLI, la CLI convierte el resultado de XML en un formato de texto legible para su visualización.
A partir de la versión 14.2 de Junos OS, los dispositivos que ejecutan Junos OS también admiten una representación de notación de objetos javaScript (JSON) de la salida del comando operativo y la jerarquía de configuración de Junos OS. En la CLI de Junos OS, para mostrar la salida o configuración del comando en JSON en lugar del texto ASCII con formato predeterminado, anexe la | display json
opción al comando.
En el siguiente ejemplo, se ejecuta el show chassis hardware
comando y se muestra el resultado en formato JSON. La respuesta es idéntica a la respuesta del servidor de protocolos NETCONF o Junos XML para la <get-chassis-inventory format="json">
solicitud RPC.
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 *// ] } ] } ] }
A partir de Junos OS versión 16.1, Junos OS utiliza una nueva implementación predeterminada para la serialización para los datos de configuración emitidos en formato JSON. El nuevo valor predeterminado, ietf
, es como se define en los siguientes borradores de Internet:
draft-ietf-netmod-yang-json-09, Codificación JSON de datos modelados con YANG
draft-ietf-netmod-yang-metadata-06, Definición y uso de metadatos con YANG
En versiones anteriores, el valor predeterminado es verbose
, que emite todos los objetos como matrices JSON. Puede configurar el formato de exportación predeterminado para los datos de configuración JSON configurando la instrucción adecuada en el [edit system export-format json]
nivel de jerarquía. Puede configurar la verbose
instrucción a partir de junos OS versión 16.1R1, aunque la instrucción no se expone en la CLI de Junos OS hasta una versión posterior.
A partir de Junos OS versión 17.3R1, los dispositivos que ejecutan Junos OS admiten la emisión del estado operativo del dispositivo en formato JSON compacto, en el que solo los objetos que tienen varios valores se emiten como matrices JSON. Para configurar el dispositivo para que emita formato JSON compacto, configure la compact
instrucción en el [edit system export-format state-data json]
nivel de jerarquía.
user@host# set system export-format state-data json compact
En el siguiente ejemplo, se ejecuta el show system uptime
comando y se muestra el resultado en formato JSON no compacto y compacto.
user@host> show system uptime | display json
Formato JSON no compacto:
{ "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" } ] } ] } ] }
El formato JSON compacto para el mismo comando es:
{ "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" } } }