Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Use o Junos PyEZ para executar RPCs em dispositivos Junos

RESUMO Use a Device rpc propriedade para executar RPCs operacionais em dispositivos Junos.

Você pode usar o Junos PyEZ para executar chamadas de procedimento remoto (RPCs) sob demanda em dispositivos Junos. Depois de criar uma instância da Device classe, você pode executar RPCs como uma propriedade da Device instância. Você pode executar a maioria dos mesmos comandos operacionais usando o Junos PyEZ que você pode executar na CLI.

A API Junos XML é uma representação XML de declarações de configuração do Junos OS e comandos de modo operacional. Ele define um equivalente XML para todas as declarações na hierarquia de configuração do Junos OS e muitos dos comandos que você emite no modo operacional CLI. Cada comando de modo operacional com uma contraparte do Junos XML mapeia um elemento de tag de solicitação e, se necessário, um elemento de tag de resposta. As tags de solicitação são usadas em RPCs dentro de sessões de protocolo NETCONF ou Junos XML para solicitar informações de um dispositivo Junos. O servidor retorna a resposta usando elementos Junos XML incluídos no elemento tag de resposta.

Quando você usa o Junos PyEZ para executar RPCs, você mapeia o nome da tag de solicitação para um nome de método. Este tópico descreve como mapear comandos CLI para RPCs Junos PyEZ, como executar RPCs usando Junos PyEZ e como personalizar os dados devolvidos na resposta do RPC.

Mapeie os comandos do Junos OS para os RPCs Junos PyEZ

Todos os comandos operacionais que têm contrapartes Junos XML estão listados no Junos XML API Explorer. Você também pode exibir o elemento de tag de solicitação Junos XML para qualquer comando de modo operacional que tenha uma contraparte Junos XML no CLI ou usando Junos PyEZ. Após obter a tag de solicitação, você pode mapeá-la para o nome do método Junos PyEZ RPC.

Para exibir a tag de solicitação Do Junos XML para um comando na CLI, inclua a opção | display xml rpc após o comando. O exemplo a seguir exibe a tag de solicitação para o show route comando:

Você também pode exibir a tag de solicitação Junos XML para um comando usando o Junos PyEZ. Para exibir a tag de solicitação, ligue para o Device método de instância display_xml_rpc() e inclua a string de comando e format='text' como argumentos. Por exemplo:

A execução do programa devolve a tag de solicitação para o show route comando.

Você pode mapear as tags de solicitação para obter um comando operacional para um nome de método Junos PyEZ RPC. Para obter o nome do método RPC, substitua quaisquer hífens na tag de solicitação por sublinhados (_) e remova os parênteses de ângulo fechados. Por exemplo, a tag de solicitação <get-route-information> mapeia o nome do get_route_information() método.

Execute RPCs como propriedade da instância do dispositivo

Cada instância Device tem uma rpc propriedade que permite que você execute qualquer RPC disponível através da API Junos XML. Em um aplicativo Junos PyEZ, após estabelecer uma conexão com o dispositivo, você pode executar o RPC anexando o nome da propriedade e do rpc método RPC à instância do dispositivo, conforme mostrado no exemplo a seguir:

O valor de devolução é um objeto XML que começa no primeiro elemento sob a <rpc-reply> tag. Neste caso, o get_software_information() RPC devolve o <software-information> elemento.

Os comandos do Junos OS podem ter opções de forma fixa que não têm valor. Por exemplo, o equivalente ao Junos XML para o show interfaces terse comando indica que terse é um elemento vazio.

Para executar um RPC e incluir uma opção de comando que não tenha um valor, adicione a opção à lista de argumentos do método RPC, altere quaisquer traços no nome da opção para sublinhar e configure-o igual ao True. O código a seguir executa o Junos PyEZ RPC equivalente ao show interfaces terse comando:

Os comandos do Junos OS também podem ter opções que exigem um valor. Por exemplo, na saída a seguir, o interface-name elemento requer um valor, que é o nome da interface para a qual você deseja devolver informações:

Para executar um RPC e incluir uma opção de comando que requer um valor, adicionar a opção à lista de argumentos do método RPC, alterar quaisquer traços no nome da opção para sublinhar e, em seguida, configurá-lo igual ao valor apropriado. O exemplo a seguir executa o Junos PyEZ RPC equivalente ao show interfaces ge-0/0/0 comando:

Especifique o formato da saída de RPC

Por padrão, o valor de retorno do RPC é um objeto XML que começa no primeiro elemento sob a <rpc-reply> tag. Você também pode devolver a saída RPC em texto ou formato De notação de objetos JavaScript (JSON), incluindo o ou o {'format':'text'} {'format':'json'} níquete como o primeiro argumento do método RPC.

Nota:

A saída de RPC no formato JSON é suportada a partir do Junos OS Release 14.2R1.

O exemplo a seguir retorna a saída do get_software_information() RPC no formato de texto, que é idêntico à saída emitida para o show version comando no CLI, exceto que a saída RPC está fechada dentro de um <output> elemento.

O exemplo a seguir devolve a saída do get_software_information() RPC no formato JSON.

Especifique o escopo dos dados para retornar

Você pode usar o Junos PyEZ para executar um RPC para recuperar informações operacionais dos dispositivos Junos. A partir do Junos PyEZ Release 2.3.0, quando você solicita a saída XML, você pode filtrar a resposta para devolver apenas elementos específicos. Filtrar a saída é benéfico quando você tem uma saída operacional extensa, mas você só precisa trabalhar com um subconjunto dos dados.

Para filtrar a resposta do RPC para devolver apenas tags específicas, inclua o argumento do filter_xml método RPC. O filter_xml parâmetro leva uma corda contendo o filtro de sub-árvore que seleciona os elementos para retornar. O filtro subtree devolve os dados que correspondem aos critérios de seleção.

O exemplo do Junos PyEZ a seguir executa o <get-interface-information> RPC e filtra a saída para recuperar apenas o <name> elemento para cada <physical-interface> elemento na resposta:

Quando você executa o script, ele exibe o elemento de nome de cada interface física.

Especifique o tempo limite do RPC

O tempo de execução do RPC pode variar consideravelmente dependendo do RPC e do dispositivo. Por padrão, os RPCs NETCONF saem após 30 segundos. Você pode estender o valor de tempo limite, incluindo o dev_timeout=seconds argumento quando executa o RPC para garantir que o RPC não desempregue durante a execução. dev_timeout Ajuste o tempo limite do dispositivo apenas para essa única operação RPC.

Normalize a resposta de RPC do XML

Quando você executa um RPC, a resposta de RPC pode incluir dados que estão envolvidos em novas linhas ou contêm outro whitespace supérfluo. O whitespace desnecessário pode dificultar a análise do XML e encontrar informações usando pesquisas baseadas em texto. Você pode normalizar uma resposta RPC, que elimina todos os whitespaces líderes e trailing e substitui sequências de caracteres whitespace internos por um único espaço.

A Tabela 1 compara uma resposta RPC padrão com a versão normalizada. A resposta RPC padrão inclui muitas linhas novas que não estão presentes na resposta normalizada.

Tabela 1: Comparação de um padrão e resposta RPC normalizada

Resposta padrão do RPC

Resposta RPC normalizada

<interface-information style="terse">
<logical-interface>
<name>\nge-0/0/0.0\n</name>
<admin-status>\nup\n</admin-status>
<oper-status>\nup\n</oper-status>
<filter-information>\n</filter-information>
<address-family>
<address-family-name>\ninet\n</address-family-name>
<interface-address>
<ifa-local emit="emit">\n198.51.100.1/24\n</ifa-local>
</interface-address>
</address-family>
</logical-interface>
</interface-information>
<interface-information style="terse">
<logical-interface>
<name>ge-0/0/0.0</name>
<admin-status>up</admin-status>
<oper-status>up</oper-status>
<filter-information/>
<address-family>
<address-family-name>inet</address-family-name>
<interface-address>
<ifa-local emit="emit">198.51.100.1/24</ifa-local>
</interface-address>
</address-family>
</logical-interface>
</interface-information>

Você pode habilitar a normalização durante a sessão com um dispositivo ou normalizar uma resposta RPC individual ao executar o RPC. Para permitir a normalização de toda a sessão do dispositivo, inclua normalize=True na lista de argumentos quando você cria a instância do dispositivo ou quando se conecta ao dispositivo usando o open() método.

Para normalizar uma resposta RPC individual, inclua normalize=True na lista de argumentos para esse método RPC.

Por exemplo:

Se você não normalizar a resposta do RPC, você deve responder por qualquer whitespace ao usar expressões XPath que façam referência a um nó ou valor específicos. O exemplo a seguir seleciona o endereço IPv4 para uma interface lógica. Na expressão XPath, o predicado que especifica a inet família deve responder pelo whitespace adicional para que a busca tenha sucesso. O valor resultante inclui novas linhas líderes e trailing.

Quando você normaliza a resposta rpc, qualquer whitespace líder e trailing é removido, o que torna as pesquisas baseadas em texto muito mais simples.