Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Crie scripts de ação para RPCs YANG em dispositivos Junos

Você pode adicionar modelos de dados YANG que definem chamadas de procedimento remoto (RPCs) personalizadas em dispositivos Junos suportados. Quando você adiciona um RPC YANG não nativo a um dispositivo, você também deve fornecer um script de ação que serve como manipulador do RPC. A definição de RPC faz referência ao script de ação, que é invocado quando o RPC é executado. O script de ação executa as operações e recupera as informações exigidas pelo RPC e devolve todos os elementos de saída XML necessários conforme definido na declaração RPC output .

Scripts de ação podem ser escritos em Stylesheet Language Alternative SyntaX (SLAX) ou Python. Os scripts de ação SLAX são semelhantes aos scripts de operação SLAX e podem executar qualquer função disponível através dos RPCs suportados pelo protocolo de gerenciamento Junos XML e pela API Junos XML. Os scripts de ação python podem aproveitar todos os recursos e construções na linguagem Python, o que oferece maior flexibilidade sobre scripts SLAX. Além disso, os scripts de ação Python oferecem suporte a APIs Junos PyEZ , que facilitam a execução de RPCs e a execução de tarefas operacionais e de configuração em dispositivos Junos. Os scripts Python também podem aproveitar a biblioteca, o que simplifica o lxml manuseio do XPath. Além disso, a partir do Junos OS Release 19.3R1, os dispositivos que executam o Junos OS com suporte freeBSD atualizado usando IPv6 em scripts de ação Python.

Este tópico discute como criar um script de ação, incluindo como analisar os argumentos de entrada RPC, acessar dados operacionais e de configuração no script, emitir a saída XML e validar e carregar o script em um dispositivo.

Plate de script de ação

Plate de script SLAX

Os scripts de ação SLAX devem incluir a placa de serviço necessária para funcionalidades básicas de script, bem como qualquer funcionalidade opcional usada dentro do script, como as funções de extensão do Junos  OS e modelos nomeados. Além disso, o script deve declarar todos os parâmetros de entrada RPC usando a param declaração. O script de ação SLAX é o seguinte:

Python Script Boilerplate

Os scripts de ação python devem incluir uma linha de diretiva de intérprete que especifica a versão Python usada para executar o script. A Tabela 1 descreve as linhas de diretiva do intérprete que você pode usar nas diferentes versões.

Versões com suporte para Interpreter
Tabela 1: Linhas de diretiva do intérprete do Python Action Script
as linhas de diretiva Python Version

Python 3

#!/usr/bin/python3
Ou
#!/usr/bin/env python3

Junos OS Release 20.2R1 e posterior

Junos OS Evolved Release 21.1R1 e posterior

Python 2.7

#!/usr/bin/python
Ou
#!/usr/bin/env python

Junos OS Release 20.1 e anterior

Junos OS Evolved Release 22.2 e anterior

Nota:

A partir do Junos OS Release 20.2R1 e do 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 só usa Python 2.7 para executar esses scripts, e o Junos OS Evolved usa Python 2.7 por padrão para executar os scripts.

Além disso, os scripts de ação python devem importar quaisquer bibliotecas, módulos ou objetos que sejam usados no script. Por exemplo, além das bibliotecas Python padrão, os scripts de ação python podem importar os seguintes:

  • jcs biblioteca — permite que o script use funções de extensão do Junos OS e a funcionalidade de modelo indicada pelo Junos OS no script.

  • jnpr.junos módulo e aulas — permite que o script use o Junos PyEZ.

  • lxml biblioteca — simplifica o manuseio do XPath.

Por exemplo:

Analisando os argumentos de entrada de RPC

Visão geral do argumento de entrada

Um RPC pode definir parâmetros de entrada usando a declaração opcional input . Quando você executa um RPC e fornece argumentos de entrada, o Junos OS invoca o script de ação do RPC e passa esses argumentos para o script. Em um script de ação Python ou SLAX, você pode acessar os argumentos de entrada RPC da mesma maneira que acessaria argumentos de linha de comando para um script Python normal ou um script operacional Junos OS SLAX, respectivamente.

Considere a declaração a seguir input para o get-host-status RPC:

O RPC pode ser executado na CLI ou por meio de uma sessão de protocolo NETCONF ou Junos XML. Por exemplo, você pode executar o seguinte comando na CLI:

Da mesma forma, você pode executar o seguinte RPC em uma sessão remota:

Quando você executa o comando ou RPC, o dispositivo invoca o script de ação e passa nos argumentos. As seções a seguir discutem como processar os argumentos no script de ação SLAX ou Python.

Nota:

A partir do 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, e o valor passado para o script de ação é o nome do parâmetro. 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, e o valor passado para o script de ação é a cadeia 'none'.

Argumentos de entrada de script SLAX

Nos scripts de ação SLAX, você deve declarar parâmetros de entrada usando a param declaração. Os nomes dos parâmetros devem ser idênticos aos nomes de parâmetros definidos no módulo YANG.

Quando invocado, o script atribui o valor de cada argumento ao parâmetro correspondente, que você pode então fazer referência ao script. Você deve incluir o símbolo do sinal de dólar ($) tanto quando você declara o parâmetro quanto quando acessa seu valor. Se um parâmetro for tipo empty, o nome do parâmetro é passado como seu valor.

Nota:

Para obter mais informações sobre parâmetros SLAX, consulte a visão geral dos parâmetros SLAX no Guia do usuário de scripts de automação.

Argumentos de entrada de script Python

Para scripts de ação python, os argumentos são passados para o script da seguinte forma:

  • O primeiro argumento é sempre o caminho do arquivo do script de ação.

  • Os próximos argumentos da lista são o nome e o valor para cada parâmetro de entrada fornecido pelo usuário.

    O nome do argumento é passado da seguinte forma:

    • No Junos OS Release 21.1 e anterior, o dispositivo passa em nome do argumento.

    • No Junos OS Release 21.2R1 e posterior, o dispositivo prefixa um único hífen (-) a nomes de argumentos de um único personagem e prefixa dois hífens (--) em nomes de argumentos de vários caracteres.

    Nota:

    Quando você executa o comando do RPC na CLI, os argumentos são passados para o script na ordem dada na linha de comando. Em uma sessão de protocolo NETCONF ou Junos XML, a ordem dos argumentos no XML é arbitrária, de modo que os argumentos são passados para o script na ordem em que são declarados na declaração do RPC input .

  • Os dois últimos argumentos da lista, fornecidos pelo sistema e não pelo usuário, são 'rpc_name' e o nome do RPC.

As seções a seguir discutem como lidar com os argumentos que são passados para scripts de ação Python nas diferentes versões.

Scripts de ação python (21.2R1 ou posterior)

A partir do Junos OS Release 21.2R1 e junos OS Evolved Release 21.2R1, quando o dispositivo passa os nomes dos argumentos de entrada para o script de ação Python, ele prefixa um único hífen (-) para nomes de argumentos de um único personagem e prefixa dois hífens (--) para nomes de argumentos de vários caracteres. Isso permite que você use bibliotecas padrão de análise de linha de comando para lidar com os argumentos.

Para o exemplo anterior do RPC YANG, a lista de argumentos de entrada do script de sys.argv ação é:

O código Python da amostra a seguir usa a argparse biblioteca para lidar com os argumentos. Nesse caso, o parser também deve explicar o rpc_name argumento de que o sistema passa para o script.

Scripts de ação python (21.1 e anteriores)

No Junos OS Release 21.1 e anterior, o dispositivo passa os nomes dos argumentos de entrada para o script de ação Python exatamente como são dados no comando ou RPC. Você pode acessar os argumentos de entrada por meio da sys.argv lista.

Para o exemplo anterior do RPC YANG, a lista de argumentos de entrada do script de sys.argv ação é:

A amostra a seguir do código Python demonstra uma maneira de extrair o valor de cada argumento da sys.arv lista para o exemplo de RPC. O exemplo primeiro define um dicionário contendo os possíveis nomes de argumentos como chaves e um valor padrão para cada argumento. Em seguida, o código verifica cada chave da sys.argv lista e recupera o índice do nome do argumento na lista, se estiver presente. O código então extrai o valor do argumento na posição de índice adjacente e o armazena no dicionário para obter a chave apropriada. Esse método garante que, se os argumentos forem passados para o script em uma ordem diferente durante a execução, o valor correto será recuperado para um determinado argumento.

Recuperação de dados operacionais e de configuração

Os scripts de ação podem recuperar dados operacionais e de configuração de um dispositivo que executa o Junos OS e, em seguida, analisar os dados para obter as informações necessárias. Os scripts de ação SLAX podem recuperar informações do dispositivo executando RPCs com o suporte do protocolo de gerenciamento Junos XML e da API Junos XML. Os scripts de ação python podem recuperar informações operacionais e de configuração usando APIs Junos PyEZ ou usando os cli -c 'command' comandos de CLI para executar no script de ação como você faria a partir da shell. Para recuperar informações operacionais com o cli -c método, inclua o comando operacional desejado. Para recuperar informações de configuração, use o show configuration comando.

O trecho SLAX a seguir executa o show interfaces comando no dispositivo local usando a tag de solicitação equivalente <get-interface-information> :

O código Python a seguir usa o Junos PyEZ para executar o get_interface_information RPC, que é equivalente ao show interfaces comando CLI:

Nota:

Para obter informações sobre como usar o Junos PyEZ para executar RPCs em dispositivos que executam o Junos OS, consulte o Uso do Junos PyEZ para executar RPCs em dispositivos que executam o Junos OS.

O código Python a seguir executa o show interfaces | display xml comando e converte a saída de string em uma árvore XML que pode ser analisada para os dados necessários usando construções XPath:

Emitindo a saída RPC XML

Um RPC pode definir elementos de saída usando a declaração opcional output . O script de ação deve definir e emitir quaisquer elementos XML necessários para a saída RPC. A hierarquia XML emitida pelo script deve refletir a árvore definida pelos contêineres e declarações da folha na definição da declaração RPC output . Para devolver a saída XML, o script de ação deve emitir a hierarquia de saída de RPC e apenas a hierarquia de saída. Os scripts SLAX devem usar a copy-of declaração para emitir o XML, e os scripts Python podem usar print declarações.

Por exemplo, considere a seguinte declaração de RPC output YANG:

O script de ação deve gerar e emitir a saída XML correspondente, por exemplo:

Após recuperar os valores dos elementos de saída necessários, um script Python pode emitir a hierarquia de saída XML usando o seguinte código:

Da mesma forma, um script de ação SLAX pode usar o seguinte:

Scripts de ação de validação e carregamento em um dispositivo

Em sua definição de RPC YANG, você especifica o script de ação do RPC, incluindo as junos:command declarações e junos:action-execute o junos:script subestadual, que leva o nome de arquivo do script de ação como seu valor. Você deve definir um único script de ação para cada RPC. Por exemplo:

Nota:

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

Nota:

Os módulos YANG que definem RPCs para dispositivos que executam o Junos OS devem importar o módulo de extensões DDL Junos OS.

Os scripts de ação python devem atender aos seguintes requisitos antes que você possa executar os scripts em dispositivos que executam o Junos OS.

  • O proprietário do arquivo é uma raiz ou um usuário na aula de login do Junos OS super-user .

  • Apenas o proprietário do arquivo tem permissão de gravação para o arquivo.

  • O script inclui uma linha de diretiva de intérprete, conforme descrito em Action Script Boilerplate.

  • A language python declaração ou language python3 declaração está configurada no nível de [edit system scripts] hierarquia para permitir a execução de scripts Python não assinados.

Nota:

A partir do Junos OS Release 20.2R1 e do 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 só usa Python 2.7 para executar esses scripts, e o Junos OS Evolved usa Python 2.7 por padrão para executar os scripts.

Nota:

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

Você pode validar a sintaxe de um script de ação na CLI emitindo o request system yang validate action-script comando e fornecendo o caminho para o script. Por exemplo:

Para usar um script de ação, você deve carregá-lo no dispositivo com o módulo YANG que contém o RPC correspondente. Você usa os request system yang add ou request system yang update comandos para adicionar módulos YANG e seus scripts de ação associados a um pacote YANG novo ou existente no dispositivo. Depois de adicionar os módulos e scripts de ação ao dispositivo, você pode executar seus RPCs personalizados. Quando você executa um RPC, o dispositivo invoca o script mencionado.

Scripts de ação de resolução de problemas

Por padrão, scripts de ação registram mensagens de rastreamento informativas quando o script é executado. Você pode visualizar as mensagens de rastreamento para verificar se o RPC invocou o script e que o script foi executado corretamente. Se o script falhar por algum motivo, os erros serão registrados no arquivo de rastreamento.

Junos OS

Para ver o script de ação rastrear mensagens nos dispositivos Junos OS em execução, veja o conteúdo do arquivo action.log trace.

Junos OS Evolved

Para ver o script de ação rastrear mensagens em dispositivos Junos OS Evolved, veja as mensagens de rastreamento de aplicativos cscript, que incluem dados de rastreamento para todos os tipos de script.

Tabela de histórico de lançamento
Lançamento
Descrição
22.3R1-EVO
A partir do Junos OS Evolved Release 22.3R1, o Junos OS Evolved usa o Python 3 para executar scripts de ação e tradução YANG.
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 um único personagem e prefixa dois hífens (--) para nomes de argumentos de vários caracteres.
20.2R1
A partir do Junos OS Release 20.2R1, o Junos OS usa o Python 3 para executar scripts de ação e tradução YANG.
19.2R1
A partir do 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, e o valor passado para o script de ação é o nome do parâmetro.
17.3R1
A partir do Junos OS Release 17.3, a action-execute declaração é um eufemismo para command.