Use o Junos PyEZ para gerenciar a configuração de resgate em dispositivos Junos
O utilitário Junos PyEZ jnpr.junos.utils.config.Config
permite que você gerencie a configuração de resgate em dispositivos Junos. Uma configuração de resgate permite definir uma configuração de trabalho conhecida ou uma configuração com um estado conhecido que você pode restaurar a qualquer momento. Você usa a configuração de resgate quando precisa reverter para uma configuração conhecida ou como último recurso se a configuração do roteador ou switch e os arquivos de configuração de backup ficarem danificados sem reparo.
Como gerenciar a configuração de resgate
O jnpr.junos.utils.config.Config
utilitário permite que você economize, recupere, carregue e exclua a configuração de resgate em um dispositivo Junos. Depois de criar uma instância da Config
classe, você usa o rescue()
método para manejar a configuração de resgate. Especifique a ação para realizar na configuração de resgate definindo o parâmetro do rescue()
método action
para a operação desejada. Os valores de ação válidos incluem"save"
, "get"
e"reload"
"delete"
. Os exemplos a seguir ilustram a chamada do método para cada rescue()
ação de método.
- Salvar uma configuração de resgate
- Recupere a configuração de resgate
- Carregue e cometa a configuração de resgate
- Exclua a configuração de resgate
Salvar uma configuração de resgate
Quando você cria uma configuração de resgate, o dispositivo economiza a configuração mais recentemente comprometida como a configuração de resgate. Para salvar a configuração ativa como configuração de resgate, especifique action="save"
na lista de argumentos do rescue()
método. Esta operação substitui qualquer configuração de resgate existente. Por exemplo:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.rescue(action='save')
Recupere a configuração de resgate
Para recuperar uma configuração de resgate existente, especifique action="get"
e especifique opcionalmente o formato como "json"
, "text"
ou "xml"
. Se você não especificar um formato, o formato padrão é o texto. Se o dispositivo não tiver uma configuração de resgate existente, o rescue()
método retorna None
.
O exemplo a seguir recupera e imprime a configuração de resgate, se houver uma.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from lxml import etree with Device(host='dc1a.example.com') as dev: cu = Config(dev) rescue = cu.rescue(action='get', format='xml') if rescue is None: print ('No existing rescue configuration.') else: print (etree.tostring(rescue, encoding='unicode'))
Carregue e cometa a configuração de resgate
Para carregar a configuração de resgate existente na configuração do candidato, especifique action="reload"
. Se não houver configuração de resgate, a operação de carga retorna False
. Após o carregamento da configuração de resgate, você deve comprometer a configuração para torná-la a configuração ativa do dispositivo.
O exemplo a seguir tenta carregar a configuração de resgate e, se houver, compromete-a a torná-la a configuração ativa.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: with Config(dev, mode='exclusive') as cu: rescue = cu.rescue(action='reload') if rescue is False: print ('No existing rescue configuration.') else: cu.pdiff() cu.commit()
Exclua a configuração de resgate
Para excluir a configuração de resgate existente, especifique action="delete"
.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.rescue(action='delete')
Exemplo: use o Junos PyEZ para salvar uma configuração de resgate
Este exemplo usa o utilitário Junos PyEZ jnpr.junos.utils.config.Config
para salvar uma configuração de resgate em um dispositivo Junos, se alguém ainda não existir.
Requisitos
Este exemplo usa os seguintes componentes de hardware e software:
Servidor de gerenciamento de configuração executando Python 3.5 ou posterior e Junos PyEZ Versão 2.0 ou posterior
Dispositivo Junos com NETCONF habilitado e uma conta de usuário configurada com permissões apropriadas
Par de chave pública/privada SSH configurado para o usuário apropriado no servidor e dispositivo Junos
Visão geral
Este exemplo apresenta um aplicativo Python que usa o utilitário Junos PyEZ Config
para salvar uma configuração de resgate no dispositivo especificado. Uma configuração de resgate permite definir uma configuração de trabalho conhecida ou uma configuração com um estado conhecido que você pode restaurar a qualquer momento. Quando você cria uma configuração de resgate, o dispositivo economiza a configuração mais recentemente comprometida como a configuração de resgate.
O aplicativo Python importa a Device
classe, que lida com a conexão com o dispositivo Junos; a Config
classe, que é usada para realizar as operações de configuração de resgate no dispositivo alvo; e exigiu exceções do jnpr.junos.exception
módulo, que contém exceções encontradas ao gerenciar dispositivos Junos. Depois de criar a Device
instância para o dispositivo alvo, o open()
método estabelece uma sessão de conexão e NETCONF com o dispositivo.
O aplicativo determina primeiro se existe uma configuração de resgate existente no dispositivo alvo. Se houver uma configuração de resgate, ela será impressa para saída padrão. Se não houver configuração de resgate existente, o aplicativo instrui o dispositivo a criar uma. O rescue()
parâmetro do método action
é definido para "get"
recuperar a configuração de resgate existente e "save"
criar uma configuração de resgate se uma não existir.
Após realizar as operações de configuração de resgate, o aplicativo chama o close()
método para encerrar a sessão e a conexão NETCONF. O aplicativo inclui código para lidar com exceções, como ConnectError
erros que ocorrem ao se conectar ao dispositivo. A aplicação também inclui código para lidar com quaisquer exceções adicionais que possam ocorrer.
Configuração
Crie o aplicativo Junos PyEZ
Procedimento passo a passo
Para criar um aplicativo Python que usa o Junos PyEZ para salvar uma configuração de resgate, caso ainda não exista no dispositivo Junos:
Importe quaisquer módulos, classes e objetos necessários.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError
Inclua quaisquer variáveis necessárias, que, por exemplo, incluem o nome de host do dispositivo gerenciado.
host = 'dc1a.example.com'
Crie uma
main()
definição de função e chamada de função e coloque as declarações restantes dentro da definição.def main(): if __name__ == "__main__": main()
Crie uma instância da
Device
classe e forneça o nome de host e quaisquer parâmetros necessários para essa conexão específica.dev = Device(host=host)
Abra uma conexão e estabeleça uma sessão NETCONF com o dispositivo.
# open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return
Crie uma instância do
Config
utilitário.# Create an instance of Config cu = Config(dev)
Imprima a configuração de resgate existente ou reserve uma caso nenhuma exista.
# Print existing rescue configuration or save one if none exists try: rescue = cu.rescue(action='get', format='text') if rescue is None: print ('No existing rescue configuration.') print ('Saving rescue configuration.') cu.rescue(action='save') else: print ('Rescue configuration found:') print (rescue) except Exception as err: print (err)
Termine a sessão NETCONF e feche a conexão com o dispositivo.
# End the NETCONF session and close the connection dev.close()
Resultados
No servidor de gerenciamento de configuração, revise a aplicação concluída. Se a aplicação não exibir o código pretendido, repita as instruções neste exemplo para corrigir a aplicação.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError host = 'dc1a.example.com' def main(): dev = Device(host=host) # open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return # Create an instance of Config cu = Config(dev) # Print existing rescue configuration or save one if none exists try: rescue = cu.rescue(action='get', format='text') if rescue is None: print ('No existing rescue configuration.') print ('Saving rescue configuration.') cu.rescue(action='save') else: print ('Rescue configuration found:') print (rescue) except Exception as err: print (err) # End the NETCONF session and close the connection dev.close() if __name__ == "__main__": main()
Execute o Junos PyEZ Code
Execute o aplicativo
Para executar o código Junos PyEZ:
-
No servidor de gerenciamento de configuração, execute o aplicativo.
user@server:~$ python3 junos-pyez-config-rescue-create.py No existing rescue configuration. Saving rescue configuration.
Neste exemplo, o dispositivo alvo não tem uma configuração de resgate existente, então o dispositivo economiza um. Se você executar o aplicativo uma segunda vez, ele saída a configuração de resgate que foi salva durante a execução inicial.
Verificação
Verifique a configuração
Propósito
Verifique se a configuração de resgate existe no dispositivo Junos.
Ação
Faça login no dispositivo Junos e veja a configuração de resgate. Por exemplo:
user@dc1a> show system configuration rescue ## Last changed: 2014-07-31 17:59:04 PDT version 13.3R1.8; groups { re0 { system { host-name dc1a; ... [output truncated]
Solucionando problemas
Solucionar erros de ação sem suporte
Problema
O código Junos PyEZ gera uma mensagem de erro indicando uma ação sem suporte.
unsupported action:
Esta mensagem de erro é gerada quando o argumento do rescue()
método action
contém um valor inválido.
Solução
Definir o argumento do rescue()
método para uma ação válida, que inclui"save"
, "get"
e "delete"
"reload"
action
.