Crie RPCs personalizados em YANG para dispositivos que executam o Junos OS
A Juniper Networks fornece módulos YANG que definem as chamadas de procedimento remoto (RPCs) para os comandos operacionais do Junos OS. A partir do Junos OS Release 16.1R3, você também pode criar modelos de dados YANG que definem RPCs personalizados para dispositivos suportados que executam o Junos OS. A criação de RPCs personalizados permite definir com precisão os parâmetros e operações de entrada e os campos de saída e a formatação para suas tarefas operacionais específicas nesses dispositivos. Quando você estende a hierarquia de comandos operacionais com um RPC YANG personalizado, você também deve fornecer um script de ação que sirva como o manipulador para o RPC. A definição de RPC faz referência ao script de ação, que é invocado quando você executa o RPC.
Este tópico descreve as etapas gerais para a criação de um módulo YANG que define um RPC personalizado para dispositivos que executam o Junos OS. Para obter informações sobre a criação de um script de ação RPC e personalização da saída de CLI do RPC, consulte Criar scripts de ação para RPCs YANG em dispositivos que executam o Junos OS e entender as extensões do Junos OS YANG para formatar a saída de RPC.
Esta seção apresenta um modelo genérico para um módulo YANG que define um RPC para dispositivos que executam o Junos OS. O modelo é seguido por uma explicação detalhada das diferentes seções e declarações do modelo.
module module-name { namespace "namespace"; prefix prefix; import junos-extension { prefix junos; } import junos-extension-odl { prefix junos-odl; } organization "organization"; description "module-description"; rpc rpc-name { description "RPC-description"; junos:command "cli-command" { junos:action-execute { junos:script "action-script-filename"; } } input { leaf input-param1 { type type; description description; } leaf input-param2 { type type; description description; } // additional leaf definitions } output { container output-container-name { container container-name { leaf output-param1 { type type; description description; // optional formatting statements } // additional leaf definitions junos-odl:format container-name-format { // CLI formatting for the parent container } } // Additional containers } } } }
Os RPCs são definidos dentro de módulos. O nome do módulo deve ser descritivo e indicar a finalidade geral dos RPCs incluídos nesse módulo, e o espaço de nome do módulo deve ser único.
module module-name { namespace "namespace"; prefix prefix; }
De acordo com RFC 6020, YANG - Uma linguagem de modelagem de dados para o protocolo de configuração de rede (NETCONF), o nome do módulo e o nome base do arquivo em que o módulo reside devem ser idênticos. Por exemplo, se o nome do módulo for get-if-info
, o nome de arquivo do módulo deve ser get-if-info.yang.
O módulo deve importar o módulo de extensões Junos OS DDL e definir um prefixo. O módulo de extensões inclui extensões YANG que são necessárias na definição de RPCs executados em dispositivos que executam o Junos OS.
import junos-extension { prefix junos; }
A partir do Junos OS Release 17.4R1, os módulos Junos OS YANG usam uma nova convenção de nomeação para nome, nome de arquivo e namespace do módulo.
Se algum dos RPCs no módulo renderizar a saída ASCII formatada, o módulo deve importar o módulo de extensões ODL Junos OS e definir um prefixo. O módulo de extensões ODL define extensões YANG que você usa para especificar com precisão como renderizar a saída quando você executa o comando operacional para esse RPC no CLI ou quando solicita a saída de RPC no formato de texto.
import junos-extension-odl { prefix junos-odl; }
Inclua a organização responsável pelo módulo, bem como uma descrição do módulo.
organization "organization"; description "module-description";
Dentro do módulo, você pode definir um ou mais RPCs, cada um com um nome único. O nome RPC é usado para executar remotamente o RPC e, portanto, deve indicar claramente a finalidade do RPC. A finalidade do RPC pode ser ainda mais esclarecida na description
declaração. Se você também definir um comando CLI para o RPC, a CLI exibirá a descrição do RPC na ajuda sensível ao contexto para essa lista de comandos.
rpc rpc-name { description "RPC-description"; }
Dentro da definição de RPC, definir o command
, action-execute
e script
as declarações, que são declarações de extensão Junos OS DDL. A command
declaração define o comando operacional que você usa para executar o RPC no Junos OS CLI. Para executar o RPC remotamente, use o nome RPC para a tag de solicitação.
A action-execute
declaração e script
o subestadual devem ser definidos para cada RPC. O script
subestimação define o nome do script de ação que é invocado quando você executa o RPC. Você deve definir um único script de ação para cada RPC.
A partir do Junos OS Release 17.3, a action-execute
declaração é um subestadual para command
. Em versões anteriores, as declarações e command
declarações action-execute
são colocadas no mesmo nível, e a command
declaração é opcional.
No Junos OS Release 17.3 e posterior, defina a
command
declaração e seus subestações.junos:command "cli-command" { junos:action-execute { junos:script "action-script-filename"; } }
No Junos OS Release 17.2 e anterior, defina as declarações e
script
asaction-execute
declarações e defina opcionalmente acommand
declaração.junos:command "cli-command"; junos:action-execute { junos:script "action-script-filename"; }
Você deve adicionar o módulo YANG e o script de ação ao dispositivo como parte de um pacote YANG novo ou existente, emitindo o request system yang add
ou request system yang update
comando. Assim, você só precisa fornecer o nome e não o caminho do script de ação para a junos:script
declaração.
Se seu script de ação for escrito no Python, você deve permitir que o dispositivo execute scripts Python não assinados configurando a language python
ou language python3
declaração sob o nível de [edit system scripts]
hierarquia em cada dispositivo onde o script será executado.
Os parâmetros de entrada para a operação de RPC são definidos dentro da declaração opcional input
. Quando você executa o RPC, o Junos OS invoca o script de ação do RPC e passa todos os parâmetros de entrada para o script.
input { leaf input-param1 { type type; description description; } leaf input-param2 { type type; description description; } // additional leaf definitions }
Começando no Junos OS Release 19.2R1, os RPCs YANG personalizados oferecem suporte a parâmetros de entrada do tipo empty
ao executar o comando do RPC no Junos OS CLI. Em versões anteriores, parâmetros de entrada do tipo empty
só são suportados ao executar o RPC em uma sessão de protocolo NETCONF ou Junos XML.
A declaração opcional output
inclui os parâmetros de saída para a operação de RPC. A output
declaração pode incluir um contêiner raiz de alto nível. É uma boa prática correlacionar o nome do contêiner raiz e o nome RPC. Por exemplo, se o nome RPC for get-xyz-information
, o nome do contêiner pode ser xyz-information
. Subestações à output
declaração definem nós sob o nó do output
RPC. Na saída XML, isso se traduziria em elementos XML sob o <rpc-reply>
elemento.
output { container output-container-name { ... } }
Dentro do contêiner raiz, você pode incluir leaf
e container
declarações. As declarações do Leaf descrevem os dados incluídos na saída de RPC para esse contêiner.
output { container output-container-name { container container-name { leaf output-param1 { type type; description description; } // additional leaf definitions } } }
Por padrão, o formato para saída de RPC é XML. Você também pode definir a saída ASCII formatada que é exibida quando você executa o comando operacional para esse RPC no CLI ou quando solicita a saída de RPC no formato de texto.
A partir do Junos OS Release 17.3, a formatação de CLI para um RPC personalizado é definida dentro da declaração de junos-odl:format
extensão. Em versões anteriores, a formatação de CLI é definida usando um contêiner que inclui a junos-odl:cli-format
declaração.
A partir do Junos OS Release 17.3, você define a formatação de CLI definindo uma
junos-odl:format
declaração, que é uma declaração de extensão do Junos OS ODL.output { container output-container-name { container container-name { leaf output-param1 { type type; description description; // optional formatting statements } // additional leaf definitions junos-odl:format container-name-format { // CLI formatting for the parent container } } // Additional containers } }
Antes do Junos OS Release 17.3, você define a formatação de CLI para um determinado contêiner dentro de um contêiner infantil que inclui a
junos-odl:cli-format
declaração.container container-name-format { junos-odl:cli-format; // CLI formatting for the parent container }
Dentro da declaração ou contêiner que define a formatação de CLI, você pode personalizar a saída de CLI do RPC usando declarações definidas no módulo de extensões ODL do Junos OS. Para obter mais informações sobre a renderização da saída ASCII formatada, consulte Personale YANG RPC Output on Devices Running Junos OS. Você também pode estipular quando os dados em um determinado contêiner são emitidos na saída CLI de um RPC. Para obter informações sobre a construção de diferentes níveis de saída para o mesmo RPC, consulte Definir diferentes níveis de saída em RPCs YANG personalizados para dispositivos que executam o Junos OS.
Para usar o RPC em um dispositivo que executa o Junos OS:
- Baixe o módulo e o script de ação para o dispositivo
- Adicione os arquivos a um pacote YANG novo ou existente, emitindo o
request system yang add
comando operacional ourequest system yang update
- Execute o RPC
- Para executar o RPC na CLI, emita o comando definido pela
junos:command
declaração. - Para executar o RPC remotamente, use o nome RPC em uma operação de solicitação de RPC.
- Para executar o RPC na CLI, emita o comando definido pela
A partir do Junos OS Release 17.3R1, quando você carrega modelos de dados YANG personalizados no dispositivo, você não precisa carregar explicitamente nenhum módulo de extensão Junos OS necessário. Em versões anteriores, você deve carregar os módulos de extensão do Junos OS para quaisquer pacotes que usem os módulos.
Quando você executa o RPC no CLI emitindo o comando definido pela junos:command
declaração, o dispositivo exibe a saída de RPC no formato CLI definido pelo RPC. Se o RPC não definir a formatação de CLI, por padrão, nenhuma saída será exibida para esse RPC na CLI. No entanto, você ainda pode exibir a saída XML para esse RPC na CLI, anexando o | display xml
filtro ao comando.
Para obter mais informações sobre OS RPCs YANG, consulte RFC 6020, YANG - Uma linguagem de modelagem de dados para o protocolo de configuração de rede (NETCONF) e RFCs relacionadas.
empty
ao executar o comando do RPC no Junos OS CLI.
action-execute
declaração é um subestadual para
command
.
junos-odl:format
extensão.