Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Como usar a biblioteca de solicitações para Python em dispositivos que executam o Junos OS

A biblioteca de solicitações para Python está disponível em determinados dispositivos que executam o Junos OS que oferecem suporte ao pacote de extensões Python. Você pode usar o requests módulo em scripts Python para enviar solicitações de HTTP/1.1. Em dispositivos que executam o Junos OS com automação aprimorada, você também pode usar o requests módulo no modo interativo Python. A biblioteca De solicitações fornece métodos adicionais para dar suporte a implantações iniciais, bem como para realizar mudanças de rotina de monitoramento e configuração em dispositivos que executam o Junos OS. Para obter informações sobre o requests módulo e suas funções, consulte a documentação de solicitações em http://docs.python-requests.org/.

Emissão de solicitações

Você pode usar o requests módulo em scripts Python na caixa para enviar solicitações HTTP/1.1. Para fazer uma solicitação, importe o módulo em seu script e ligue para a função correspondente à solicitação desejada. O módulo oferece suporte a HTTP GET e POST solicitações, bem como HEAD, DELETEe PUT solicitações. A solicitação devolve um objeto de resposta contendo a resposta do servidor. Por padrão, as solicitações são feitas usando a instância de roteamento padrão.

A biblioteca de solicitações pode ser usada para executar RPCs em dispositivos que executam o Junos OS que oferecem suporte ao serviço REST API. O dispositivo alvo deve ser configurado com as declarações apropriadas no nível de [edit system services rest] hierarquia para habilitar os comandos Junos OS em HTTP ou HTTPS usando REST.

Por exemplo, o script op a seguir executa uma solicitação GET que executa o get-software-information RPC em um dispositivo remoto que executa o Junos OS que tem o serviço REST API sobre HTTP configurado na porta padrão (3000). O script imprime o código de status de resposta e, se o código de status indica sucesso, ele imprime o conteúdo de resposta.

Para recuperar apenas os cabeçalhos, você pode enviar uma solicitação simples HEAD .

Se uma solicitação GET exigir parâmetros adicionais, você pode incluir o params argumento e fornecer um cookies ou uma lista de tuples ou bytes para enviar a cadeia de consulta, ou você pode passar em pares de chave/valor como parte do URL. Da mesma forma, você pode fornecer cabeçalhos personalizados, incluindo o headers argumento e um níquete de cabeçalhos HTTP.

A solicitação a seguir executa o get-interface-information RPC com a opção terse para a interface determinada e retorna a resposta em formato de texto:

O exemplo a seguir fornece os argumentos como pares de chave/valor na URL:

Para executar vários RPCs na mesma solicitação, inicie uma solicitação HTTP POST e defina o data parâmetro para fazer referência aos RPCs a executar. Veja seções executando RPCs operacionais e gerenciando a configuração para exemplos que executam vários RPCs.

Execução de RPCs operacionais

Você pode usar o requests módulo para executar RPCs a partir da API Junos XML em um dispositivo remoto que executa o Junos OS que tem o serviço REST API habilitado.

O script de operação a seguir usa o requests módulo para executar o RPC equivalente ao show interfaces ge-2/0/1 terse comando do modo operacional no dispositivo alvo:

O script de operação a seguir envia uma solicitação POST que executa vários RPCs no dispositivo alvo. O data parâmetro faz referência aos RPCs a serem executados, que são definidos em uma cadeia multiline para leitura.

Você também pode criar um script de operação genérico para o qual o usuário fornece as variáveis necessárias e o script constrói e executa a solicitação. Considere a seguinte configuração de script de operação, que configura os argumentos de hostlinha de comando erpc_args, rpcpara o script de operação requests-rpc.py:

O script de operação de amostra a seguir se conecta a um dispositivo remoto que executa o Junos OS, que foi configurado com as declarações apropriadas no nível de hierarquia para permitir que os [edit system services rest] comandos do Junos OS via HTTP usem REST. O script solicita a senha da conexão e se conecta ao host e à porta fornecidos através do host argumento. Em seguida, o script usa o requests módulo para enviar uma solicitação GET executando o RPC que foi fornecido através dos argumentos da linha de comando.

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 operaçã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. Em versões anteriores, os dispositivos prefixam um único hífen (-) em todos os nomes de argumentos.

Quando você executa o script, ele executa o RPC com as opções especificadas no dispositivo remoto e imprime a resposta à saída padrão.

Gerenciando a configuração

Você pode usar o requests módulo para recuperar ou alterar a configuração em um dispositivo que executa o Junos OS que tem o serviço REST API habilitado.

O script de operação a seguir recupera a [edit system] hierarquia da configuração do candidato usando uma solicitação POST:

As solicitações de HTTP POST também permitem que você execute vários RPCs em uma única solicitação, por exemplo, para bloquear, carregar, comprometer e desbloquear uma configuração.

O script de operação de amostra a seguir se conecta ao dispositivo remoto e configura um endereço na interface determinada. As operações de bloqueio, carga, compromisso e desbloqueio são definidas separadamente para a leitura, mas os RPCs são concatenados na solicitação.

Quando você executa o script de operação, ele devolve os resultados do RPC para o bloqueio, carga, compromisso e desbloqueio das operações. Em alguns dispositivos, a saída de resposta separa as respostas individuais de RPC com linhas de limite que incluem -- uma sequência de limites e um Content-Type cabeçalho. Outros dispositivos podem incluir apenas o Content-Type cabeçalho.

Usando certificados em solicitações de HTTPS

O mecanismo de autenticação básica de HTTP envia credenciais de usuário como uma cadeia de texto claro codificada pela Base64. Para proteger as credenciais de autenticação contra escutas, recomendamos habilitar o serviço RESTful API em HTTPS, que criptografa a comunicação usando Segurança de Camada de Transporte (TLS) ou Camada de Soquetes Seguros (SSL). Para obter informações sobre a configuração deste serviço, consulte o Junos OS REST API Guide.

Por padrão, a biblioteca de solicitações verifica certificados SSL para solicitações de HTTPS. Você pode incluir os argumentos e cert argumentos verify na solicitação para controlar as opções de verificação de SSL. Para obter informações detalhadas sobre essas opções, consulte a documentação de Solicitações.

Nota:

Quando você usa o Python 2.7 para executar um script que usa o requests módulo para executar solicitações DE HTTPS, o script gera InsecurePlatformWarning e SubjectAltNameWarning alertas.

O script de operação a seguir envia uma solicitação get pelo HTTPS e define o verify argumento para o caminho de arquivo de um pacote ca ou um diretório contendo certificados CA confiáveis. Os certificados ca especificados são usados para verificar o certificado do servidor.

Para especificar um certificado local do lado do cliente, defina o cert argumento igual ao caminho de um único arquivo contendo a chave privada e o certificado do cliente ou para um tuple contendo os caminhos do certificado de cliente individual e arquivos-chave privados.

Especificando a instância de roteamento

Por padrão, as solicitações são executadas usando a instância de roteamento padrão. Você também pode executar solicitações usando a mgmt_junos instância de gerenciamento ou outra instância de roteamento não padrão. Quando você executa scripts pela infraestrutura do Junos OS, você pode especificar a instância de roteamento chamando a set_routing_instance() função no script. Determinados dispositivos também têm suporte para especificar a instância de roteamento e executar um script na shell de nível Unix.

Nota:

Em dispositivos que executam o Junos OS Evolved, a set_routing_instance() função só oferece suporte usando a instância de roteamento de gerenciamento.

Em um script Python, para executar uma solicitação usando uma instância de roteamento não padrão, incluindo a mgmt_junos instância:

  1. Importe o jcs módulo.
  2. Ligue para a set_routing_instance() função e especifique a instância a ser usada para a conexão.
  3. Estabeleça a conexão com o dispositivo alvo.

O script de operação a seguir usa a mgmt_junos instância de gerenciamento para se conectar ao dispositivo alvo e executar solicitações.

Para obter informações sobre o uso da set_routing_instance() função em scripts Python, consulte set_routing_instance().

Além de especificar a instância de roteamento no script, determinados dispositivos oferecem suporte para especificar a instância de roteamento e executar um script a partir do shell de nível Unix. Em dispositivos que executam o Junos OS com Automação Aprimorada (Versão FreeBSD 7.1 ou posterior), você pode usar o setfib comando para executar solicitações com a determinada instância de roteamento, incluindo a instância de gerenciamento e outras instâncias de roteamento não padrão.

O script Python a seguir simplesmente executa o get-software-information RPC em um dispositivo remoto e imprime a resposta:

Para usar setfib para executar o script usando uma instância de roteamento não padrão em um dispositivo que executa o Junos OS com automação aprimorada:

  1. Encontre o índice de software associado à tabela de roteamento, por exemplo.

    No exemplo a seguir, o dispositivo está configurado para usar a instância mgmt_junosde gerenciamento dedicada não padrão. O índice da tabela de roteamento é mencionado na saída de comando.

    Para executar o script de operação com a determinada instância de roteamento, use o setfib comando para executar o script e fazer referência ao índice. Por exemplo:

    No exemplo a seguir, o dispositivo está configurado com uma instância de roteamento não padrão, vr1, e o índice da tabela de roteamento vr1.inet é 8:

    O comando a seguir executa o script de operação usando a instância de roteamento vr1:

Desempenho das operações de ZTP

O provisionamento zero touch (ZTP) permite que você provisione novos dispositivos da Juniper Networks em sua rede automaticamente, com intervenção manual mínima. Para usar o ZTP, você configura um servidor para fornecer as informações necessárias, que podem incluir uma imagem do Junos OS e um arquivo de configuração para carregar ou um script para executar. Quando você conecta fisicamente um dispositivo à rede e o inicializa com uma configuração padrão de fábrica, o dispositivo recupera as informações do servidor designado, atualiza a imagem do Junos OS conforme apropriado e executa o script ou carrega o arquivo de configuração.

Quando você conecta e inicializa um novo dispositivo de rede, se o Junos OS detectar um arquivo no servidor, a primeira linha do arquivo é examinada. Se o Junos OS encontrar os personagens #! seguido por um caminho de intérprete, ele trata o arquivo como um script e executa-o com o intérprete especificado. Você pode usar a biblioteca de solicitações em scripts executados para agilizar o processo ZTP.

Por exemplo, considere a seguinte amostra do script Python, que o novo dispositivo baixa e executa durante o processo ZTP. Quando o script é executado, ele primeiro baixa o ca_cert_remote certificado CA do local no servidor especificado e o armazena localmente no ca_cert_local local. O script então se conecta ao servidor de configuração na porta 8000 e emite uma solicitação GET para recuperar a nova configuração do dispositivo. A solicitação inclui o caminho até o certificado ca, que é usado para verificar o certificado do servidor durante a troca. Em seguida, o script usa a biblioteca Junos PyEZ para carregar a configuração no dispositivo e empenhá-la.