NESTA PÁGINA
Exemplo: altere a configuração usando scripts Python Op
Os scripts de operação permitem que você faça alterações controladas na configuração do Junos OS. Os scripts de operação são vantajosos, pois podem coletar informações operacionais sobre um dispositivo e atualizar a configuração com base nessas informações. Usuários experientes que estejam familiarizados com o Junos OS podem escrever scripts de operação que solicitam as informações de configuração relevantes e modificam a configuração de acordo. Isso permite que usuários com menos experiência com o Junos OS modifiquem a configuração com segurança usando o script. Este exemplo demonstra como fazer mudanças na configuração do Junos OS usando um script de operação Python que utiliza APIs Junos PyEZ.
Requisitos
Este exemplo usa os seguintes componentes de hardware e software:
Roteador da Série MX executando o Junos OS Versão 16.1R3 ou versão posterior que inclui o pacote de extensões Python.
Visão geral e script de op
Os scripts de operação Python podem fazer alterações na configuração do Junos OS usando o utilitário Junos PyEZjnpr.junos.utils.config.Config
. O utilitário Junos PyEZ Config
fornece métodos de instância para bloquear a configuração, carregar os dados de configuração e especificar como integrá-los à configuração, comprometer a configuração e desbloquear a configuração. Para obter mais informações sobre o uso do Junos PyEZ para configurar dispositivos Junos, consulte o uso do Junos PyEZ para configurar dispositivos Junos. O script op python neste exemplo demonstra como atualizar a configuração para desativar uma interface no dispositivo local.
O script de operação Python importa o seguinte:
Device
classe — lida com a conexão com o dispositivo JunosConfig
classe — executa comandos de modo de configuração no dispositivo alvojnpr.junos.exception
módulo — contém exceções encontradas ao gerenciar dispositivos Junosjcs
módulo — permite que o script execute funções de extensão suportadas
Neste exemplo, a usage
variável é inicializada com uma descrição geral da função do script. Quando o script é executado, o script cria a descrição de uso na CLI para que o usuário possa verificar a finalidade desse script.
O script chama a função de jcs.get_input()
extensão, que leva o usuário a inserir o nome da interface para desabilitar, e armazena o nome da interface
interface na variável. A config_xml
variável é uma string XML que define as mudanças de configuração.
O script não fornece um parâmetro de host ao criar a instância, o Device
que faz com que o open()
método estabeleça uma conexão com o dispositivo local. Este exemplo cria a Config
instância usando um gerenciador de contexto para mode='exclusive'
obter um bloqueio exclusivo na configuração enquanto ela está sendo modificada. Nesse modo, o gerenciador de contexto lida automaticamente com o bloqueio e o desbloqueio da configuração do candidato. Os Config
métodos de utilidade carregam as alterações de configuração na configuração do candidato como uma load merge
operação e confirmam a configuração. O dev.close()
método fecha a conexão.
Python Script
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import * import jcs import sys def main(): usage = """ This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. """ print (usage) interface = jcs.get_input("Enter interface to disable: ") if not interface: print ("invalid interface") sys.exit(1) config_xml = """ <configuration> <interfaces> <interface> <name>{0}</name> <disable/> </interface> </interfaces> </configuration> """.format(interface).strip() dev = Device() dev.open() try: with Config(dev, mode="exclusive") as cu: print ("Loading and committing configuration changes") cu.load(config_xml, format="xml", merge=True) cu.commit() except Exception as err: print (err) dev.close() return dev.close() if __name__ == "__main__": main()
Configuração
Procedimento passo a passo
Baixar, habilitar e testar o script:
-
Copie o script em um arquivo de texto, nomeie o arquivo config-change.py e copie-o para o /var/db/scripts/op/ directory no dispositivo.
Nota:Os scripts Python não assinados devem ser de propriedade de uma raiz ou de um usuário na classe de login do Junos OS
super-user
, e apenas o proprietário do arquivo pode ter permissão de gravação para o arquivo. -
No modo de configuração, inclua a
file config-change.py
declaração no nível de[edit system scripts op]
hierarquia.[edit system scripts] user@host# set op file config-change.py
-
Habilite a execução de scripts Python não assinados no dispositivo.
[edit system scripts] user@host# set language python
Nota:Configure a declaração para usar o
language python3
Python 3 para executar scripts Python ou configurar a declaração para usar olanguage python
Python 2.7 para executar scripts Python. Para obter mais informações, consulte a linguagem. -
Emita o
commit and-quit
comando para comprometer a configuração e voltar ao modo operacional.[edit] user@host# commit and-quit
-
Antes de executar o script, emita o comando do
show interfaces interface-name
modo operacional e registre o estado atual da interface que será desativado pelo script. -
Execute o script de operação emitindo o comando do
op config-change.py
modo operacional.user@host> op config-change.py This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0 Loading and committing configuration changes
Verificação
Verificando o compromisso
Propósito
Verifique se o compromisso foi bem sucedido.
Ação
Você deve incluir um código em seu script que captura quaisquer avisos ou erros associados à mudança e ao comprometimento da configuração. Com isso, você pode determinar com mais facilidade se o compromisso foi bem-sucedido. Se não houver mensagens de aviso ou erro, você pode verificar o sucesso do commit de várias maneiras.
Verifique o registro de confirmação para verificar se o confirmação foi bem-sucedido.
user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via netconf
Verifique o arquivo de mensagens de syslog para verificar se a operação de confirmação foi registrada. Nesse caso, você também vê uma
SNMP_TRAP_LINK_DOWN
mensagem para a interface desabilitada. Dependendo das configurações de configuração para rastreamentos, essa mensagem pode ou não aparecer em seu arquivo de registro.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation Sep 22 17:08:16 host xntpd[1386]: ntpd exiting on signal 1 Sep 22 17:08:16 host xntpd[1386]: ntpd 4.2.0-a Fri Jun 25 13:48:13 UTC 2010 (1) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
Verificando as mudanças de configuração
Propósito
Verifique se as alterações corretas estão integradas à configuração.
Ação
Exibir a configuração e verificar se as alterações são visíveis para a interface especificada.
user@host> show configuration interfaces so-0/0/0 disable;
Por exemplo, você também pode emitir o comando de
show interfaces interface-name
modo operacional para verificar se a interface foi desativada. Nesse caso, a saída capturada antes da interface ser desativada mostra que a interface éEnabled
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
A saída capturada após executar o script para desabilitar a interface mostra que a interface está agora
Administratively down
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None