Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Exemplo: Use um RPC YANG personalizado para recuperar informações operacionais em dispositivos Junos

Você pode adicionar modelos de dados YANG que definem RPCs personalizados em dispositivos Junos. Criar RPCs personalizados permite que você defina 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. Este exemplo apresenta um RPC e um script de ação personalizados que recuperam informações operacionais do dispositivo e exibem a saída CLI personalizada.

O RPC é adicionado ao esquema do Junos OS no dispositivo. Quando o RPC é executado na CLI, ele imprime o nome e o status operacional para as interfaces físicas solicitadas.

Requisitos

Este exemplo usa os seguintes componentes de hardware e software:

  • Dispositivo em execução Junos OS Release 17.3R1 ou posterior que oferece suporte ao carregamento de modelos de dados YANG personalizados.

Visão geral do RPC e script de ação

O módulo YANG neste exemplo define um RPC personalizado para devolver o nome e o status operacional de determinadas interfaces físicas. O módulo rpc-interface-status YANG é salvo no arquivo rpc-interface-status.yang . O módulo importa os módulos de extensão Junos OS, que fornecem as extensões necessárias para executar RPCs personalizados no dispositivo e personalizar a saída CLI.

O módulo define o get-interface-status RPC. A <get-interface-status> tag de solicitação é usada para executar remotamente o RPC no dispositivo. Na definição de RPC, a junos:command declaração define o comando que é usado para executar o RPC na CLI, que neste caso é show intf status.

As junos:action-execute declarações e junos:script declarações definem o script de ação que é invocado quando o RPC é executado. Este exemplo usa um script de ação python chamado rpc-interface-status.py para recuperar as informações exigidas pelo RPC e devolver os elementos de saída XML conforme definido na declaração de RPC output .

Nota:

A partir do Junos OS Release 17.3, a action-execute declaração é um subestações 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.

O RPC tem um parâmetro de entrada chamado match, que determina que as interfaces incluam na saída. Quando você executa o RPC, você inclui uma string que combina com as interfaces desejadas, por exemplo ge-0*. Uma corda vazia ("") combina em todas as interfaces. O script de ação define o valor padrão como uma string vazia, portanto match , se o usuário omitir esse argumento, a saída incluirá informações para todas as interfaces.

O RPC também define os nós de saída que devem ser emitidos pelo script de ação correspondente. O nó raiz é o <interface-status-info> elemento, que contém zero ou mais <status-info> elementos que incluem o nó e <status> os <interface> nós para uma interface combinada. A junos-odl:format interface-status-info-format declaração define a formatação para a saída exibida na CLI. Este nó não é emitido na árvore XML de saída.

Este exemplo apresenta duas versões do script de ação python. Os scripts demonstram meios diferentes para recuperar a saída de comando operacional, mas ambos os scripts emitem uma saída RPC idêntica. O primeiro script de ação usa o módulo Python subprocess para executar o show interfaces match-value | display xml comando e depois converte a saída de string em XML. O segundo script de ação usa o Junos PyEZ para executar o RPC equivalente ao show interfaces match-value comando. Ambos os scripts usam código idêntico para analisar a saída de comando e extrair o nome e o status operacional para cada interface física. Os scripts constroem o XML para a saída RPC e depois imprimem a saída, que devolve as informações ao dispositivo. A árvore XML deve corresponder exatamente à hierarquia definida no RPC.

Nota:

Os dispositivos Junos definem namespaces dependentes de versão para muitos dos elementos na saída operacional, incluindo o <interface-information> elemento. Para tornar a versão do RPC Junos OS independente, o código usa a local-name() função nas expressões XPath para esses elementos. Você pode optar por incluir o mapeamento de namespace como um argumento e xpath() qualificar os elementos com o namespace apropriado.

O módulo que contém o RPC e o arquivo de script de ação são adicionados ao dispositivo como parte de um novo pacote YANG chamado intf-rpc.

Módulo YANG

Módulo YANG

O módulo YANG, rpc-interface-status.yang, define o RPC, o comando usado para executar o RPC na CLI e o nome do script de ação para invocar quando o RPC é executado. O nome base do arquivo deve combinar com o nome do módulo.

Script de ação

O script de ação correspondente é rpc-interface-status.py. Este exemplo apresenta dois scripts de ação que usam meios diferentes para recuperar os dados. Um script usa o módulo Python subprocess e o outro script usa a biblioteca Junos PyEZ. Ambos os scripts emitem a mesma saída RPC XML.

Nota:

A partir do Junos OS Release 21.2R1 e Junos OS Evolved Release 21.2R1, quando o dispositivo passa argumentos de linha de comando para um script de ação Python, ele prefixa um único hífen (-) para nomes de argumentos de caractere único e prefixa dois hífens (--) para nomes de argumentos de vários caracteres.

Script de ação (usando subprocess)

O script de ação a seguir usa o módulo Python subprocess para executar o comando operacional e recuperar os dados. Este exemplo fornece duas versões do script, que lidam adequadamente com os argumentos de linha de comando do script para os diferentes lançamentos.

Junos OS Release 21.1 e anterior

Versão Junos OS 21.2R1 e posterior

Script de ação (usando Junos PyEZ)

O script de ação a seguir usa o Junos PyEZ para executar o comando operacional e recuperar os dados. Este exemplo fornece duas versões do script, que lidam adequadamente com os argumentos de linha de comando do script para os diferentes lançamentos.

Junos OS Release 21.1 e anterior

Versão Junos OS 21.2R1 e posterior

Habilitando a execução de scripts python

Para permitir que o dispositivo execute scripts python não assinados:

  1. Configure a declaração ou language python3 a language python declaração, conforme apropriado para a versão do Junos OS.
    Nota:

    A partir do Junos OS Release 20.2R1 e Junos OS Evolved Release 22.3R1, o dispositivo usa Python 3 para executar scripts de ação e tradução YANG. Em versões anteriores, o Junos OS usa apenas o Python 2.7 para executar esses scripts, e o Junos OS Evolved usa o Python 2.7 por padrão para executar os scripts.

  2. Confirmar a configuração.

Carregando o RPC no dispositivo

Para adicionar o RPC e o script de ação ao esquema Junos:

  1. Baixe o módulo YANG e o script de ação para o dispositivo Junos.
  2. Garanta que o script de ação do Python atenda aos seguintes requisitos:
  3. (Opcional) Valide a sintaxe para o módulo YANG e o script de ação.
  4. Adicione o módulo YANG e o script de ação a um novo pacote YANG.
    Nota:

    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.

  5. Quando o sistema solicita que você reinicie o Junos OS CLI, pressione Enter para aceitar o valor padrão de yes, ou digitar yes e pressionar Enter.

Verificando o RPC

Propósito

Verifique se o RPC funciona como esperado.

Ação

A partir do modo operacional, execute o RPC na CLI emitindo o comando definido pela junos:command declaração na definição de RPC e inclua o argumento de match entrada. Neste exemplo, o argumento de correspondência é usado para combinar em todas as interfaces que começam com a GE-0.

Você também pode ajustar a condição de correspondência para devolver diferentes conjuntos de interfaces. Por exemplo:

Para devolver a mesma saída no formato XML, aplicação do | display xml filtro ao comando.

Nota:

Para combinar em todas as interfaces, omite o match argumento ou defina o valor do argumento para uma corda vazia ("").

Significado

Quando você executa o RPC, o dispositivo invoca o script de ação. O script de ação executa o comando operacional para recuperar as informações da interface do dispositivo, analisa a saída para as informações desejadas e imprime a hierarquia XML para a saída RPC conforme definido na declaração do RPC output . Quando você executa o RPC no CLI, o dispositivo usa a formatação CLI definida no RPC para converter a saída XML na saída CLI exibida. Para devolver a saída XML original, apense o | display xml filtro ao comando.

Nota:

Quando o RPC é executado remotamente usando a tag de solicitação de RPC, o formato padrão para a saída é XML.

Resolução de problemas de erros de execução de RPC

Problema

Descrição

Quando você executa o RPC, o dispositivo gera o seguinte erro:

Causa

O usuário que invocou o RPC não tem as permissões necessárias para executar o script de ação python correspondente.

Solução

Os usuários só podem executar scripts python não assinados em dispositivos Junos quando as permissões de arquivo do script incluem a permissão de leitura para a primeira classe em que o usuário se encaixa, na ordem do usuário, do grupo ou de outros.

Verifique se o script tem as permissões necessárias para que esse usuário execute o script e ajuste as permissões, se apropriado. Se você atualizar as permissões, você também deve atualizar o pacote YANG para que essa mudança entre em vigor. Por exemplo:

Tabela de histórico de lançamentos
Lançamento
Descrição
21.2R1 e 21.2R1-EVO
A partir do Junos OS Release 21.2R1 e Junos OS Evolved Release 21.2R1, quando o dispositivo passa argumentos de linha de comando para um script de ação Python, ele prefixa um único hífen (-) para nomes de argumentos de caractere único e prefixa dois hífens (--) para nomes de argumentos de vários caracteres.