Mapeie a saída de comando do Junos OS para JSON no CLI
O sistema operacional Junos (Junos OS) oferece suporte nativo ao XML para a operação e configuração de dispositivos que executam o Junos OS, e a interface de linha de comando (CLI) do Junos OS e a infraestrutura do Junos OS se comunicam usando xML. Quando você emite um comando operacional ou exibe a configuração no CLI, o CLI converte a saída do XML em um formato de texto legível para exibição.
A partir do Junos OS Release 14.2, os dispositivos que executam o Junos OS também oferecem suporte a uma representação de Notação de Objetos JavaScript (JSON) da saída de comando operacional e da hierarquia de configuração do Junos OS. No Junos OS CLI, para exibir a saída ou configuração de comando no JSON, em vez de no texto ASCII formatado padrão, a aplicação da opção | display json
ao comando.
O exemplo a seguir executa o show chassis hardware
comando e exibe a saída no formato JSON. A resposta é idêntica à resposta do servidor de protocolo NETCONF ou Junos XML para a solicitação <get-chassis-inventory format="json">
de 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 do Junos OS Release 16.1, o Junos OS usa uma nova implementação padrão para serialização para dados de configuração emitidos no formato JSON. O novo padrão, ietf
é conforme definido nos seguintes rascunhos da Internet:
draft-ietf-netmod-yang-json-09, codificação JSON de dados modelada com YANG
draft-ietf-netmod-yang-metadados-06, definindo e usando metadados com YANG
Em versões anteriores, o padrão é verbose
, que emite todos os objetos como arranjos JSON. Você pode configurar o formato de exportação padrão para dados de configuração JSON configurando a declaração apropriada no nível de [edit system export-format json]
hierarquia. Você pode configurar a declaração a partir do verbose
Junos OS Release 16.1R1, embora a declaração não esteja exposta no Junos OS CLI até um lançamento posterior.
A partir do Junos OS Release 17.3R1, os dispositivos que executam o Junos OS oferecem suporte ao estado operacional do dispositivo em formato JSON compacto, no qual apenas objetos com vários valores são emitidos como arranjos JSON. Para configurar o dispositivo para emitir o formato JSON compacto, configure a compact
declaração no nível de [edit system export-format state-data json]
hierarquia.
user@host# set system export-format state-data json compact
O exemplo a seguir executa o show system uptime
comando e exibe a saída em formato JSON não compacto e compacto.
user@host> show system uptime | display json
Formato JSON não 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" } ] } ] } ] }
O formato JSON compacto para o mesmo comando é:
{ "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" } } }