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:
Deviceclasse — lida com a conexão com o dispositivo JunosConfigclasse — executa comandos de modo de configuração no dispositivo alvojnpr.junos.exceptionmódulo — contém exceções encontradas ao gerenciar dispositivos Junosjcsmó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.pydeclaraçã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 python3Python 3 para executar scripts Python ou configurar a declaração para usar olanguage pythonPython 2.7 para executar scripts Python. Para obter mais informações, consulte a linguagem. -
Emita o
commit and-quitcomando 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-namemodo 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.pymodo 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_DOWNmensagem 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-namemodo 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