Use o Junos PyEZ para confirmar a configuração
O Junos PyEZ permite que você faça mudanças de configuração estruturadas e não estruturadas em dispositivos Junos. Depois de se conectar ao dispositivo e modificar a configuração, você deve confirmar a configuração para torná-la ativa. Este tópico discute como confirmar a configuração e quais opções de confirmação são suportadas em aplicativos Junos PyEZ.
Como confirmar a configuração do candidato
Quando você usa o utilitário Junos PyEZ jnpr.junos.utils.config.Config para fazer mudanças de configuração não estruturadas em um dispositivo, você confirma a configuração do candidato chamando o método de Config instância commit() . Por exemplo:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConfigLoadError, CommitError
with Device(host='router1.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
try:
cu.load(path='configs/mx_config.conf', merge=True)
cu.commit()
except (ConfigLoadError, CommitError) as err:
print (err)
Para verificar a sintaxe da configuração sem confirmá-la, chame o commit_check() método no lugar do commit() método.
cu.commit_check()
Quando você usa tabelas e visualizações de configuração do Junos PyEZ para fazer mudanças de configuração estruturadas em um dispositivo, você confirma a configuração do candidato chamando o set() método, que chama automaticamente os lock()métodos , load()e unlock() commit() , ou chamando os vários métodos individualmente. Por exemplo:
from jnpr.junos import Device
from myTables.UserConfigTable import UserConfigTable
with Device(host='router1.example.com') as dev:
userconfig = UserConfigTable(dev)
# ...set the values for the configuration data...
userconfig.append()
userconfig.set(merge=True)
Da mesma forma, você pode chamar os métodos individuais, como no exemplo a seguir:
from jnpr.junos import Device
from myTables.UserConfigTable import UserConfigTable
with Device(host='router1.example.com') as dev:
userconfig = UserConfigTable(dev)
# ...set the values for the configuration data...
userconfig.append()
userconfig.lock()
userconfig.load(merge=True)
userconfig.commit()
userconfig.unlock()
Se você usar um gerenciador de contexto para criar o Config objeto ou Table e definir o mode argumento como private, exclusive, dynamic, batchou ephemeral, você só chamará os load() métodos and commit() para configurar o dispositivo. O gerenciador de contexto lida com a abertura, o bloqueio, o fechamento e o desbloqueio do banco de dados, portanto, as chamadas para os lock()métodos , unlock()ou set() em um desses modos resultam em uma exceção LockError.
Como especificar opções de confirmação
O Junos CLI fornece opções para a operação de confirmação, como adicionar um comentário de confirmação ou sincronizar a configuração em vários mecanismos de roteamento. O Junos PyEZ oferece suporte a muitas dessas mesmas opções de commit e algumas opções adicionais, que você pode usar em sua aplicação Junos PyEZ incluindo os argumentos apropriados na lista de argumentos do commit() método or set() . A Tabela 1 descreve as opções de confirmação suportadas e fornece o comando CLI correspondente.
| Argumento da opção commit |
Descrição |
Comando CLI |
|---|---|---|
|
|
Registre um comentário para essa operação de confirmação no arquivo de log do sistema e no histórico de confirmação do dispositivo. |
|
|
|
Exigir que uma operação de confirmação seja confirmada dentro de um período de tempo especificado após a confirmação inicial. Caso contrário, reverta para a configuração confirmada anteriormente. Defina o argumento como |
|
|
|
Retorna um objeto XML com informações detalhadas sobre o processo de confirmação. |
|
|
|
Sincronize e confirme a configuração em ambos os mecanismos de roteamento, mesmo que o outro Mecanismo de Roteamento tenha sessões de configuração abertas ou alterações de configuração não confirmadas. |
|
|
|
Ignore os avisos gerados durante a operação de confirmação. Defina o argumento como |
– |
|
|
Sincronize e comprometa a configuração em ambos os mecanismos de roteamento. |
|
|
|
Aguarde a conclusão da operação usando o valor especificado como o tempo limite. |
– |
Comentário do commit
Ao confirmar a configuração, você pode incluir um breve comentário para descrever a finalidade das mudanças confirmadas. Para registrar um comentário descrevendo as alterações, inclua o comment parâmetro e uma cadeia de caracteres de mensagem na lista de argumentos do commit() método or set() , conforme apropriado. Por exemplo:
cu.commit(comment='Configuring ge-0/0/0 interface')
Incluir o comment argumento é equivalente a emitir o commit comment comando do modo de configuração na CLI. O comentário é registrado no arquivo de log do sistema e incluído no histórico de confirmação do dispositivo, que pode ser visualizado emitindo o show system commit comando na CLI.
Confirmar confirmação
Para exigir que uma operação de confirmação seja confirmada dentro de um período de tempo especificado após a confirmação inicial, inclua o confirm=minutes argumento na lista de argumentos do commit() método or set() , conforme apropriado.
cu.commit(confirm=15)
Se a confirmação não for confirmada dentro do limite de tempo determinado, o dispositivo reverterá automaticamente para a configuração confirmada anteriormente e enviará uma mensagem de broadcast para todos os usuários conectados. O intervalo permitido é de 1 a 65.535 minutos. Você também pode especificar confirm=True o uso do tempo de reversão padrão de 10 minutos. Para confirmar a operação de confirmação, chame o commit() método or commit_check() .
A operação de confirmação confirmada é útil para verificar se uma alteração de configuração funciona corretamente e não impede o acesso de gerenciamento ao dispositivo. Se a alteração impedir o acesso ou causar outros erros, a reversão automática para a configuração anterior habilitará o acesso ao dispositivo após o término do prazo de reversão. Se você perder a conectividade com o dispositivo, deverá emitir o método Junos PyEZ open() para restaurar a conectividade.
Detalhe do commit
Você pode revisar os detalhes de toda a operação de confirmação incluindo o detail=True argumento na lista de argumentos do commit() método or set() . Quando você inclui esse argumento, o método retorna um objeto XML com informações detalhadas sobre o processo de confirmação. O valor retornado é equivalente ao conteúdo delimitado pelo <commit-results> elemento na saída do commit | display detail | display xml comando na CLI.
from lxml import etree
...
commit_detail = cu.commit(detail=True)
print (etree.tostring(commit_detail, encoding='unicode'))
Sincronização de confirmação
Se o dispositivo tiver mecanismos de roteamento duplos, você poderá sincronizar e confirmar a configuração em ambos os mecanismos de roteamento incluindo o sync=True argumento na lista de argumentos do commit() método ou set() .
cu.commit(sync=True)
Quando você inclui o sync=True argumento, o dispositivo copia a configuração do candidato armazenada no Mecanismo de Roteamento local para o outro Mecanismo de Roteamento, verifica a exatidão sintática do candidato e a confirma em ambos os mecanismos de roteamento. Para forçar a commit synchronize operação a ser bem-sucedida, mesmo que haja sessões de configuração abertas ou alterações de configuração não confirmadas no outro Mecanismo de Roteamento, use o force_sync=True argumento, que faz com que o dispositivo encerre todas as sessões de configuração no outro Mecanismo de Roteamento antes de sincronizar e confirmar a configuração.
cu.commit(force_sync=True)
Confirmar e confirmar o tempo limite de verificação
O tempo padrão para um RPC atingir o tempo limite é de 30 segundos. Grandes alterações na configuração podem exceder esse valor, fazendo com que uma operação de confirmação ou verificação de confirmação atinja o tempo limite antes que a configuração possa ser carregada, verificada e confirmada. Para acomodar alterações de configuração que podem exigir uma verificação de confirmação ou tempo de confirmação maior que o intervalo de tempo limite padrão, inclua o timeout=seconds argumento na commit_check()lista de argumentos do método commit() ou set() ou e defina o intervalo de tempo limite como um valor apropriado. Por exemplo:
cu.commit_check(timeout=60)
cu.commit(timeout=360)
Ignorar avisos
O Junos PyEZ gera uma RpcError exceção quando a resposta RPC contém <rpc-error> elementos com uma gravidade de aviso ou superior. Nos casos em que é necessário ou desejável suprimir as RpcError exceções geradas em resposta a avisos, você pode incluir o commit() parâmetro do ignore_warning método. Por exemplo:
cu.commit(ignore_warning=True)
Para obter mais informações sobre como usar o ignore_warning parâmetro, consulte Suprimir exceções de RpcError geradas para avisos em aplicativos Junos PyEZ.